home *** CD-ROM | disk | FTP | other *** search
/ Kompuutteri K-CD 2002 #1 / K-CD_2002-01.iso / Delphi / INSTALL / program files / Borland / Delphi6 / Source / Rtl / Win / CommCtrl.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  2001-05-22  |  270.2 KB  |  8,813 lines

  1.  
  2. {*******************************************************}
  3. {                                                       }
  4. {       Borland Delphi Run-time Library                 }
  5. {       Win32 common controls interface unit            }
  6. {                                                       }
  7. {       Copyright (c) 1985-1999, Microsoft Corporation  }
  8. {                                                       }
  9. {       Translator: Borland Software Corporation        }
  10. {                                                       }
  11. {*******************************************************}
  12.  
  13. unit CommCtrl;
  14.  
  15. {$WEAKPACKAGEUNIT}
  16.  
  17. interface
  18.  
  19. (*$HPPEMIT '' *)
  20. (*$HPPEMIT '#include <CommCtrl.h>' *)
  21. (*$HPPEMIT '' *)
  22.  
  23. { Although the COMMCTRL unit requires the ActiveX unit, COMMCTRL.HPP does }
  24. { not require ActiveX.hpp to compile. Hence the $NOINCLUDE directive.     }
  25. (*$NOINCLUDE ActiveX *)
  26.  
  27. uses Messages, Windows, ActiveX;
  28.  
  29. { From prsht.h -- Interface for the Windows Property Sheet Pages }
  30.  
  31. const
  32.   {$EXTERNALSYM MAXPROPPAGES}
  33.   MAXPROPPAGES = 100;
  34.  
  35.   {$EXTERNALSYM PSP_DEFAULT}
  36.   PSP_DEFAULT             = $00000000;
  37.   {$EXTERNALSYM PSP_DLGINDIRECT}
  38.   PSP_DLGINDIRECT         = $00000001;
  39.   {$EXTERNALSYM PSP_USEHICON}
  40.   PSP_USEHICON            = $00000002;
  41.   {$EXTERNALSYM PSP_USEICONID}
  42.   PSP_USEICONID           = $00000004;
  43.   {$EXTERNALSYM PSP_USETITLE}
  44.   PSP_USETITLE            = $00000008;
  45.   {$EXTERNALSYM PSP_RTLREADING}
  46.   PSP_RTLREADING          = $00000010;
  47.   {$EXTERNALSYM PSP_HASHELP}
  48.   PSP_HASHELP             = $00000020;
  49.   {$EXTERNALSYM PSP_USEREFPARENT}
  50.   PSP_USEREFPARENT        = $00000040;
  51.   {$EXTERNALSYM PSP_USECALLBACK}
  52.   PSP_USECALLBACK         = $00000080;
  53.   {$EXTERNALSYM PSP_PREMATURE}
  54.   PSP_PREMATURE           = $00000400;
  55.   {$EXTERNALSYM PSP_HIDEHEADER}
  56.   PSP_HIDEHEADER          = $00000800;
  57.   {$EXTERNALSYM PSP_USEHEADERTITLE}
  58.   PSP_USEHEADERTITLE      = $00001000;
  59.   {$EXTERNALSYM PSP_USEHEADERSUBTITLE}
  60.   PSP_USEHEADERSUBTITLE   = $00002000;
  61.  
  62.   {$EXTERNALSYM PSPCB_RELEASE}
  63.   PSPCB_RELEASE           = 1;
  64.   {$EXTERNALSYM PSPCB_CREATE}
  65.   PSPCB_CREATE            = 2;
  66.  
  67.   {$EXTERNALSYM PSH_DEFAULT}
  68.   PSH_DEFAULT             = $00000000;
  69.   {$EXTERNALSYM PSH_PROPTITLE}
  70.   PSH_PROPTITLE           = $00000001;
  71.   {$EXTERNALSYM PSH_USEHICON}
  72.   PSH_USEHICON            = $00000002;
  73.   {$EXTERNALSYM PSH_USEICONID}
  74.   PSH_USEICONID           = $00000004;
  75.   {$EXTERNALSYM PSH_PROPSHEETPAGE}
  76.   PSH_PROPSHEETPAGE       = $00000008;
  77.   {$EXTERNALSYM PSH_WIZARDHASFINISH}
  78.   PSH_WIZARDHASFINISH     = $00000010;
  79.   PSH_MULTILINETABS       = $00000010;
  80.   {$EXTERNALSYM PSH_WIZARD}
  81.   PSH_WIZARD              = $00000020;
  82.   {$EXTERNALSYM PSH_USEPSTARTPAGE}
  83.   PSH_USEPSTARTPAGE       = $00000040;
  84.   {$EXTERNALSYM PSH_NOAPPLYNOW}
  85.   PSH_NOAPPLYNOW          = $00000080;
  86.   {$EXTERNALSYM PSH_USECALLBACK}
  87.   PSH_USECALLBACK         = $00000100;
  88.   {$EXTERNALSYM PSH_HASHELP}
  89.   PSH_HASHELP             = $00000200;
  90.   {$EXTERNALSYM PSH_MODELESS}
  91.   PSH_MODELESS            = $00000400;
  92.   {$EXTERNALSYM PSH_RTLREADING}
  93.   PSH_RTLREADING          = $00000800;
  94.   {$EXTERNALSYM PSH_WIZARDCONTEXTHELP}
  95.   PSH_WIZARDCONTEXTHELP   = $00001000;
  96.   {$EXTERNALSYM PSH_WIZARD97}
  97.   PSH_WIZARD97            = $00002000;
  98.   {$EXTERNALSYM PSH_WATERMARK}
  99.   PSH_WATERMARK           = $00008000;
  100.   {$EXTERNALSYM PSH_USEHBMWATERMARK}
  101.   PSH_USEHBMWATERMARK     = $00010000;  // user pass in a hbmWatermark instead of pszbmWatermark
  102.   {$EXTERNALSYM PSH_USEHPLWATERMARK}
  103.   PSH_USEHPLWATERMARK     = $00020000;  //
  104.   {$EXTERNALSYM PSH_STRETCHWATERMARK}
  105.   PSH_STRETCHWATERMARK    = $00040000;  // stretchwatermark also applies for the header
  106.   {$EXTERNALSYM PSH_HEADER}
  107.   PSH_HEADER              = $00080000;
  108.   {$EXTERNALSYM PSH_USEHBMHEADER}
  109.   PSH_USEHBMHEADER        = $00100000;
  110.   {$EXTERNALSYM PSH_USEPAGELANG}
  111.   PSH_USEPAGELANG         = $00200000;  // use frame dialog template matched to page
  112.  
  113.   {$EXTERNALSYM PSCB_INITIALIZED}
  114.   PSCB_INITIALIZED  = 1;
  115.   {$EXTERNALSYM PSCB_PRECREATE}
  116.   PSCB_PRECREATE    = 2;
  117.  
  118.   {$EXTERNALSYM PSN_FIRST}
  119.   PSN_FIRST               = -200;
  120.   {$EXTERNALSYM PSN_LAST}
  121.   PSN_LAST                = -299;
  122.  
  123.   {$EXTERNALSYM PSN_SETACTIVE}
  124.   PSN_SETACTIVE           = PSN_FIRST - 0;
  125.   {$EXTERNALSYM PSN_KILLACTIVE}
  126.   PSN_KILLACTIVE          = PSN_FIRST - 1;
  127.   {$EXTERNALSYM PSN_APPLY}
  128.   PSN_APPLY               = PSN_FIRST - 2;
  129.   {$EXTERNALSYM PSN_RESET}
  130.   PSN_RESET               = PSN_FIRST - 3;
  131.   {$EXTERNALSYM PSN_HELP}
  132.   PSN_HELP                = PSN_FIRST - 5;
  133.   {$EXTERNALSYM PSN_WIZBACK}
  134.   PSN_WIZBACK             = PSN_FIRST - 6;
  135.   {$EXTERNALSYM PSN_WIZNEXT}
  136.   PSN_WIZNEXT             = PSN_FIRST - 7;
  137.   {$EXTERNALSYM PSN_WIZFINISH}
  138.   PSN_WIZFINISH           = PSN_FIRST - 8;
  139.   {$EXTERNALSYM PSN_QUERYCANCEL}
  140.   PSN_QUERYCANCEL         = PSN_FIRST - 9;
  141.   {$EXTERNALSYM PSN_GETOBJECT}
  142.   PSN_GETOBJECT           = PSN_FIRST - 10;
  143.  
  144.   {$EXTERNALSYM PSNRET_NOERROR}
  145.   PSNRET_NOERROR              = 0;
  146.   {$EXTERNALSYM PSNRET_INVALID}
  147.   PSNRET_INVALID              = 1;
  148.   {$EXTERNALSYM PSNRET_INVALID_NOCHANGEPAGE}
  149.   PSNRET_INVALID_NOCHANGEPAGE = 2;
  150.  
  151.   {$EXTERNALSYM PSM_SETCURSEL}
  152.   PSM_SETCURSEL           = WM_USER + 101;
  153.   {$EXTERNALSYM PSM_REMOVEPAGE}
  154.   PSM_REMOVEPAGE          = WM_USER + 102;
  155.   {$EXTERNALSYM PSM_ADDPAGE}
  156.   PSM_ADDPAGE             = WM_USER + 103;
  157.   {$EXTERNALSYM PSM_CHANGED}
  158.   PSM_CHANGED             = WM_USER + 104;
  159.   {$EXTERNALSYM PSM_RESTARTWINDOWS}
  160.   PSM_RESTARTWINDOWS      = WM_USER + 105;
  161.   {$EXTERNALSYM PSM_REBOOTSYSTEM}
  162.   PSM_REBOOTSYSTEM        = WM_USER + 106;
  163.   {$EXTERNALSYM PSM_CANCELTOCLOSE}
  164.   PSM_CANCELTOCLOSE       = WM_USER + 107;
  165.   {$EXTERNALSYM PSM_QUERYSIBLINGS}
  166.   PSM_QUERYSIBLINGS       = WM_USER + 108;
  167.   {$EXTERNALSYM PSM_UNCHANGED}
  168.   PSM_UNCHANGED           = WM_USER + 109;
  169.   {$EXTERNALSYM PSM_APPLY}
  170.   PSM_APPLY               = WM_USER + 110;
  171.   {$EXTERNALSYM PSM_SETTITLE}
  172.   PSM_SETTITLE            = WM_USER + 111;
  173.   {$EXTERNALSYM PSM_SETTITLEW}
  174.   PSM_SETTITLEW           = WM_USER + 120;
  175.   {$EXTERNALSYM PSM_SETWIZBUTTONS}
  176.   PSM_SETWIZBUTTONS       = WM_USER + 112;
  177.   {$EXTERNALSYM PSM_PRESSBUTTON}
  178.   PSM_PRESSBUTTON         = WM_USER + 113;
  179.   {$EXTERNALSYM PSM_SETCURSELID}
  180.   PSM_SETCURSELID         = WM_USER + 114;
  181.   {$EXTERNALSYM PSM_SETFINISHTEXT}
  182.   PSM_SETFINISHTEXT       = WM_USER + 115;
  183.   {$EXTERNALSYM PSM_SETFINISHTEXTW}
  184.   PSM_SETFINISHTEXTW      = WM_USER + 121;
  185.   {$EXTERNALSYM PSM_GETTABCONTROL}
  186.   PSM_GETTABCONTROL       = WM_USER + 116;
  187.   {$EXTERNALSYM PSM_ISDIALOGMESSAGE}
  188.   PSM_ISDIALOGMESSAGE     = WM_USER + 117;
  189.  
  190.   {$EXTERNALSYM PSWIZB_BACK}
  191.   PSWIZB_BACK             = $00000001;
  192.   {$EXTERNALSYM PSWIZB_NEXT}
  193.   PSWIZB_NEXT             = $00000002;
  194.   {$EXTERNALSYM PSWIZB_FINISH}
  195.   PSWIZB_FINISH           = $00000004;
  196.   {$EXTERNALSYM PSWIZB_DISABLEDFINISH}
  197.   PSWIZB_DISABLEDFINISH   = $00000008;
  198.  
  199.   {$EXTERNALSYM PSBTN_BACK}
  200.   PSBTN_BACK              = 0;
  201.   {$EXTERNALSYM PSBTN_NEXT}
  202.   PSBTN_NEXT              = 1;
  203.   {$EXTERNALSYM PSBTN_FINISH}
  204.   PSBTN_FINISH            = 2;
  205.   {$EXTERNALSYM PSBTN_OK}
  206.   PSBTN_OK                = 3;
  207.   {$EXTERNALSYM PSBTN_APPLYNOW}
  208.   PSBTN_APPLYNOW          = 4;
  209.   {$EXTERNALSYM PSBTN_CANCEL}
  210.   PSBTN_CANCEL            = 5;
  211.   {$EXTERNALSYM PSBTN_HELP}
  212.   PSBTN_HELP              = 6;
  213.   {$EXTERNALSYM PSBTN_MAX}
  214.   PSBTN_MAX               = 6;
  215.  
  216.   {$EXTERNALSYM ID_PSRESTARTWINDOWS}
  217.   ID_PSRESTARTWINDOWS     = 2;
  218.   {$EXTERNALSYM ID_PSREBOOTSYSTEM}
  219.   ID_PSREBOOTSYSTEM       = ID_PSRESTARTWINDOWS or 1;
  220.  
  221.   {$EXTERNALSYM WIZ_CXDLG}
  222.   WIZ_CXDLG               = 276;
  223.   {$EXTERNALSYM WIZ_CYDLG}
  224.   WIZ_CYDLG               = 140;
  225.  
  226.   {$EXTERNALSYM WIZ_CXBMP}
  227.   WIZ_CXBMP               = 80;
  228.  
  229.   {$EXTERNALSYM WIZ_BODYX}
  230.   WIZ_BODYX               = 92;
  231.   {$EXTERNALSYM WIZ_BODYCX}
  232.   WIZ_BODYCX              = 184;
  233.  
  234.   {$EXTERNALSYM PROP_SM_CXDLG}
  235.   PROP_SM_CXDLG           = 212;
  236.   {$EXTERNALSYM PROP_SM_CYDLG}
  237.   PROP_SM_CYDLG           = 188;
  238.  
  239.   {$EXTERNALSYM PROP_MED_CXDLG}
  240.   PROP_MED_CXDLG          = 227;
  241.   {$EXTERNALSYM PROP_MED_CYDLG}
  242.   PROP_MED_CYDLG          = 215;
  243.  
  244.   {$EXTERNALSYM PROP_LG_CXDLG}
  245.   PROP_LG_CXDLG           = 252;
  246.   {$EXTERNALSYM PROP_LG_CYDLG}
  247.   PROP_LG_CYDLG           = 218;
  248.  
  249. type
  250.   HPropSheetPage = Pointer;
  251.  
  252.   PPropSheetPageA = ^TPropSheetPageA;
  253.   PPropSheetPageW = ^TPropSheetPageW;
  254.   PPropSheetPage = PPropSheetPageA;
  255.  
  256.   {$EXTERNALSYM LPFNPSPCALLBACKA}
  257.   LPFNPSPCALLBACKA = function(Wnd: HWnd; Msg: Integer;
  258.     PPSP: PPropSheetPageA): Integer stdcall;
  259.   {$EXTERNALSYM LPFNPSPCALLBACKW}
  260.   LPFNPSPCALLBACKW = function(Wnd: HWnd; Msg: Integer;
  261.     PPSP: PPropSheetPageW): Integer stdcall;
  262.   {$EXTERNALSYM LPFNPSPCALLBACK}
  263.   LPFNPSPCALLBACK = LPFNPSPCALLBACKA;
  264.   TFNPSPCallbackA = LPFNPSPCALLBACKA;
  265.   TFNPSPCallbackW = LPFNPSPCALLBACKW;
  266.   TFNPSPCallback = TFNPSPCallbackA;
  267.  
  268.   {$EXTERNALSYM _PROPSHEETPAGEA}
  269.   _PROPSHEETPAGEA = record
  270.     dwSize: Longint;
  271.     dwFlags: Longint;
  272.     hInstance: THandle;
  273.     case Integer of
  274.       0: (
  275.         pszTemplate: PAnsiChar);
  276.       1: (
  277.         pResource: Pointer;
  278.         case Integer of
  279.           0: (
  280.             hIcon: THandle);
  281.           1: (
  282.             pszIcon: PAnsiChar;
  283.             pszTitle: PAnsiChar;
  284.             pfnDlgProc: Pointer;
  285.             lParam: Longint;
  286.             pfnCallback: TFNPSPCallbackA;
  287.             pcRefParent: PInteger;
  288.             pszHeaderTitle: PAnsiChar;      // this is displayed in the header
  289.             pszHeaderSubTitle: PAnsiChar)); //
  290.   end;
  291.   {$EXTERNALSYM _PROPSHEETPAGEW}
  292.   _PROPSHEETPAGEW = record
  293.     dwSize: Longint;
  294.     dwFlags: Longint;
  295.     hInstance: THandle;
  296.     case Integer of
  297.       0: (
  298.         pszTemplate: PWideChar);
  299.       1: (
  300.         pResource: Pointer;
  301.         case Integer of
  302.           0: (
  303.             hIcon: THandle);
  304.           1: (
  305.             pszIcon: PWideChar;
  306.             pszTitle: PWideChar;
  307.             pfnDlgProc: Pointer;
  308.             lParam: Longint;
  309.             pfnCallback: TFNPSPCallbackW;
  310.             pcRefParent: PInteger;
  311.             pszHeaderTitle: PWideChar;      // this is displayed in the header
  312.             pszHeaderSubTitle: PWideChar)); //
  313.   end;
  314.   {$EXTERNALSYM _PROPSHEETPAGE}
  315.   _PROPSHEETPAGE = _PROPSHEETPAGEA;
  316.   TPropSheetPageA = _PROPSHEETPAGEA;
  317.   TPropSheetPageW = _PROPSHEETPAGEW;
  318.   TPropSheetPage = TPropSheetPageA;
  319.   {$EXTERNALSYM PROPSHEETPAGEA}
  320.   PROPSHEETPAGEA = _PROPSHEETPAGEA;
  321.   {$EXTERNALSYM PROPSHEETPAGEW}
  322.   PROPSHEETPAGEW = _PROPSHEETPAGEW;
  323.   {$EXTERNALSYM PROPSHEETPAGE}
  324.   PROPSHEETPAGE = PROPSHEETPAGEA;
  325.  
  326.  
  327.   {$EXTERNALSYM PFNPROPSHEETCALLBACK}
  328.   PFNPROPSHEETCALLBACK = function(Wnd: HWnd; Msg: Integer;
  329.     LParam: Integer): Integer stdcall;
  330.   TFNPropSheetCallback = PFNPROPSHEETCALLBACK;
  331.  
  332.   PPropSheetHeaderA = ^TPropSheetHeaderA;
  333.   PPropSheetHeaderW = ^TPropSheetHeaderW;
  334.   PPropSheetHeader = PPropSheetHeaderA;
  335.   {$EXTERNALSYM _PROPSHEETHEADERA}
  336.   _PROPSHEETHEADERA = record
  337.     dwSize: Longint;
  338.     dwFlags: Longint;
  339.     hwndParent: HWnd;
  340.     hInstance: THandle;
  341.     case Integer of
  342.       0: (
  343.     hIcon: THandle);
  344.       1: (
  345.     pszIcon: PAnsiChar;
  346.     pszCaption: PAnsiChar;
  347.     nPages: Integer;
  348.     case Integer of
  349.       0: (
  350.         nStartPage: Integer);
  351.       1: (
  352.         pStartPage: PAnsiChar;
  353.         case Integer of
  354.           0: (
  355.         ppsp: PPropSheetPageA);
  356.           1: (
  357.         phpage: Pointer;
  358.         pfnCallback: TFNPropSheetCallback;
  359.                 case Integer of
  360.                   0: (
  361.                     hbmWatermark: HBITMAP);
  362.                   1: (
  363.                     pszbmWatermark: PAnsiChar;
  364.                     hplWatermark: HPALETTE;
  365.                     // Header bitmap shares the palette with watermark
  366.                     case Integer of
  367.                       0: (
  368.                         hbmHeader: HBITMAP);
  369.                       1: (
  370.                         pszbmHeader: PAnsiChar)))));
  371.   end;
  372.   {$EXTERNALSYM _PROPSHEETHEADERW}
  373.   _PROPSHEETHEADERW = record
  374.     dwSize: Longint;
  375.     dwFlags: Longint;
  376.     hwndParent: HWnd;
  377.     hInstance: THandle;
  378.     case Integer of
  379.       0: (
  380.     hIcon: THandle);
  381.       1: (
  382.     pszIcon: PWideChar;
  383.     pszCaption: PWideChar;
  384.     nPages: Integer;
  385.     case Integer of
  386.       0: (
  387.         nStartPage: Integer);
  388.       1: (
  389.         pStartPage: PWideChar;
  390.         case Integer of
  391.           0: (
  392.         ppsp: PPropSheetPageW);
  393.           1: (
  394.         phpage: Pointer;
  395.         pfnCallback: TFNPropSheetCallback;
  396.                 case Integer of
  397.                   0: (
  398.                     hbmWatermark: HBITMAP);
  399.                   1: (
  400.                     pszbmWatermark: PWideChar;
  401.                     hplWatermark: HPALETTE;
  402.                     // Header bitmap shares the palette with watermark
  403.                     case Integer of
  404.                       0: (
  405.                         hbmHeader: HBITMAP);
  406.                       1: (
  407.                         pszbmHeader: PWideChar)))));
  408.   end;
  409.   {$EXTERNALSYM _PROPSHEETHEADER}
  410.   _PROPSHEETHEADER = _PROPSHEETHEADERA;
  411.   TPropSheetHeaderA = _PROPSHEETHEADERA;
  412.   TPropSheetHeaderW = _PROPSHEETHEADERW;
  413.   TPropSheetHeader = TPropSheetHeaderA;
  414.  
  415.   {$EXTERNALSYM LPFNADDPROPSHEETPAGE}
  416.   LPFNADDPROPSHEETPAGE = function(hPSP: HPropSheetPage;
  417.     lParam: Longint): BOOL stdcall;
  418.   TFNAddPropSheetPage = LPFNADDPROPSHEETPAGE;
  419.  
  420.   {$EXTERNALSYM LPFNADDPROPSHEETPAGES}
  421.   LPFNADDPROPSHEETPAGES = function(lpvoid: Pointer; pfn: TFNAddPropSheetPage;
  422.     lParam: Longint): BOOL stdcall;
  423.   TFNAddPropSheetPages = LPFNADDPROPSHEETPAGES;
  424.  
  425. {$EXTERNALSYM CreatePropertySheetPage}
  426. function CreatePropertySheetPage(var PSP: TPropSheetPage): HPropSheetPage; stdcall;
  427. {$EXTERNALSYM CreatePropertySheetPageA}
  428. function CreatePropertySheetPageA(var PSP: TPropSheetPageA): HPropSheetPage; stdcall;
  429. {$EXTERNALSYM CreatePropertySheetPageW}
  430. function CreatePropertySheetPageW(var PSP: TPropSheetPageW): HPropSheetPage; stdcall;
  431. {$EXTERNALSYM DestroyPropertySheetPage}
  432. function DestroyPropertySheetPage(hPSP: HPropSheetPage): BOOL; stdcall;
  433. {$EXTERNALSYM PropertySheet}
  434. function PropertySheet(var PSH: TPropSheetHeader): Integer; stdcall;
  435. {$EXTERNALSYM PropertySheetA}
  436. function PropertySheetA(var PSH: TPropSheetHeaderA): Integer; stdcall;
  437. {$EXTERNALSYM PropertySheetW}
  438. function PropertySheetW(var PSH: TPropSheetHeaderW): Integer; stdcall;
  439.  
  440. { From commctrl.h }
  441.  
  442. type
  443.   {$EXTERNALSYM tagINITCOMMONCONTROLSEX}
  444.   tagINITCOMMONCONTROLSEX = packed record
  445.     dwSize: DWORD;             // size of this structure
  446.     dwICC: DWORD;              // flags indicating which classes to be initialized
  447.   end;
  448.   PInitCommonControlsEx = ^TInitCommonControlsEx;
  449.   TInitCommonControlsEx = tagINITCOMMONCONTROLSEX;
  450.   
  451. const
  452.   {$EXTERNALSYM ICC_LISTVIEW_CLASSES}
  453.   ICC_LISTVIEW_CLASSES   = $00000001; // listview, header
  454.   {$EXTERNALSYM ICC_TREEVIEW_CLASSES}
  455.   ICC_TREEVIEW_CLASSES   = $00000002; // treeview, tooltips
  456.   {$EXTERNALSYM ICC_BAR_CLASSES}
  457.   ICC_BAR_CLASSES        = $00000004; // toolbar, statusbar, trackbar, tooltips
  458.   {$EXTERNALSYM ICC_TAB_CLASSES}
  459.   ICC_TAB_CLASSES        = $00000008; // tab, tooltips
  460.   {$EXTERNALSYM ICC_UPDOWN_CLASS}
  461.   ICC_UPDOWN_CLASS       = $00000010; // updown
  462.   {$EXTERNALSYM ICC_PROGRESS_CLASS}
  463.   ICC_PROGRESS_CLASS     = $00000020; // progress
  464.   {$EXTERNALSYM ICC_HOTKEY_CLASS}
  465.   ICC_HOTKEY_CLASS       = $00000040; // hotkey
  466.   {$EXTERNALSYM ICC_ANIMATE_CLASS}
  467.   ICC_ANIMATE_CLASS      = $00000080; // animate
  468.   {$EXTERNALSYM ICC_WIN95_CLASSES}
  469.   ICC_WIN95_CLASSES      = $000000FF;
  470.   {$EXTERNALSYM ICC_DATE_CLASSES}
  471.   ICC_DATE_CLASSES       = $00000100; // month picker, date picker, time picker, updown
  472.   {$EXTERNALSYM ICC_USEREX_CLASSES}
  473.   ICC_USEREX_CLASSES     = $00000200; // comboex
  474.   {$EXTERNALSYM ICC_COOL_CLASSES}
  475.   ICC_COOL_CLASSES       = $00000400; // rebar (coolbar) control
  476.   {$EXTERNALSYM ICC_INTERNET_CLASSES}
  477.   ICC_INTERNET_CLASSES   = $00000800;
  478.   {$EXTERNALSYM ICC_PAGESCROLLER_CLASS}
  479.   ICC_PAGESCROLLER_CLASS = $00001000; // page scroller
  480.   {$EXTERNALSYM ICC_NATIVEFNTCTL_CLASS}
  481.   ICC_NATIVEFNTCTL_CLASS = $00002000; // native font control
  482.  
  483. {$EXTERNALSYM InitCommonControls}
  484. procedure InitCommonControls; stdcall;
  485. {$EXTERNALSYM InitCommonControlsEx}
  486. function InitCommonControlsEx(var ICC: TInitCommonControlsEx): Bool; { Re-defined below }
  487.  
  488. const
  489.   {$EXTERNALSYM IMAGE_BITMAP}
  490.   IMAGE_BITMAP = 0;
  491.  
  492. const
  493.   {$EXTERNALSYM ODT_HEADER}
  494.   ODT_HEADER              = 100;
  495.   {$EXTERNALSYM ODT_TAB}
  496.   ODT_TAB                 = 101;
  497.   {$EXTERNALSYM ODT_LISTVIEW}
  498.   ODT_LISTVIEW            = 102;
  499.  
  500.  
  501. { ====== Ranges for control message IDs ======================= }
  502.  
  503. const
  504.   {$EXTERNALSYM LVM_FIRST}
  505.   LVM_FIRST               = $1000;      { ListView messages }
  506.   {$EXTERNALSYM TV_FIRST}
  507.   TV_FIRST                = $1100;      { TreeView messages }
  508.   {$EXTERNALSYM HDM_FIRST}
  509.   HDM_FIRST               = $1200;      { Header messages }
  510.   {$EXTERNALSYM TCM_FIRST}
  511.   TCM_FIRST               = $1300;      { Tab control messages }
  512.   {$EXTERNALSYM PGM_FIRST}
  513.   PGM_FIRST               = $1400;      { Pager control messages }
  514.   {$EXTERNALSYM CCM_FIRST}
  515.   CCM_FIRST               = $2000;      { Common control shared messages }
  516.  
  517.   {$EXTERNALSYM CCM_SETBKCOLOR}
  518.   CCM_SETBKCOLOR          = CCM_FIRST + 1; // lParam is bkColor
  519.  
  520. type
  521.   {$EXTERNALSYM tagCOLORSCHEME}
  522.   tagCOLORSCHEME = packed record
  523.     dwSize: DWORD;
  524.     clrBtnHighlight: COLORREF;    // highlight color
  525.     clrBtnShadow: COLORREF;       // shadow color
  526.   end;
  527.   PColorScheme = ^TColorScheme;
  528.   TColorScheme = tagCOLORSCHEME;
  529.  
  530. const
  531.   {$EXTERNALSYM CCM_SETCOLORSCHEME}
  532.   CCM_SETCOLORSCHEME      = CCM_FIRST + 2; // lParam is color scheme
  533.   {$EXTERNALSYM CCM_GETCOLORSCHEME}
  534.   CCM_GETCOLORSCHEME      = CCM_FIRST + 3; // fills in COLORSCHEME pointed to by lParam
  535.   {$EXTERNALSYM CCM_GETDROPTARGET}
  536.   CCM_GETDROPTARGET       = CCM_FIRST + 4;
  537.   {$EXTERNALSYM CCM_SETUNICODEFORMAT}
  538.   CCM_SETUNICODEFORMAT    = CCM_FIRST + 5;
  539.   {$EXTERNALSYM CCM_GETUNICODEFORMAT}
  540.   CCM_GETUNICODEFORMAT    = CCM_FIRST + 6;
  541.  
  542.   {$EXTERNALSYM INFOTIPSIZE}
  543.   INFOTIPSIZE = 1024;  // for tooltips
  544.  
  545. { ====== WM_NOTIFY codes (NMHDR.code values) ================== }
  546.  
  547. const
  548.   {$EXTERNALSYM NM_FIRST}
  549.   NM_FIRST                 = 0-  0;       { generic to all controls }
  550.   {$EXTERNALSYM NM_LAST}
  551.   NM_LAST                  = 0- 99;
  552.  
  553.   {$EXTERNALSYM LVN_FIRST}
  554.   LVN_FIRST                = 0-100;       { listview }
  555.   {$EXTERNALSYM LVN_LAST}
  556.   LVN_LAST                 = 0-199;
  557.  
  558.   {$EXTERNALSYM HDN_FIRST}
  559.   HDN_FIRST                = 0-300;       { header }
  560.   {$EXTERNALSYM HDN_LAST}
  561.   HDN_LAST                 = 0-399;
  562.  
  563.   {$EXTERNALSYM TVN_FIRST}
  564.   TVN_FIRST                = 0-400;       { treeview }
  565.   {$EXTERNALSYM TVN_LAST}
  566.   TVN_LAST                 = 0-499;
  567.  
  568.   {$EXTERNALSYM TTN_FIRST}
  569.   TTN_FIRST                = 0-520;       { tooltips }
  570.   {$EXTERNALSYM TTN_LAST}
  571.   TTN_LAST                 = 0-549;
  572.  
  573.   {$EXTERNALSYM TCN_FIRST}
  574.   TCN_FIRST                = 0-550;       { tab control }
  575.   {$EXTERNALSYM TCN_LAST}
  576.   TCN_LAST                 = 0-580;
  577.  
  578. { Shell reserved           (0-580) -  (0-589) }
  579.  
  580.   {$EXTERNALSYM CDN_FIRST}
  581.   CDN_FIRST                = 0-601;       { common dialog (new) }
  582.   {$EXTERNALSYM CDN_LAST}
  583.   CDN_LAST                 = 0-699;
  584.  
  585.   {$EXTERNALSYM TBN_FIRST}
  586.   TBN_FIRST                = 0-700;       { toolbar }
  587.   {$EXTERNALSYM TBN_LAST}
  588.   TBN_LAST                 = 0-720;
  589.  
  590.   {$EXTERNALSYM UDN_FIRST}
  591.   UDN_FIRST                = 0-721;       { updown }
  592.   {$EXTERNALSYM UDN_LAST}
  593.   UDN_LAST                 = 0-740;
  594.  
  595.   {$EXTERNALSYM MCN_FIRST}
  596.   MCN_FIRST                = 0-750;       { monthcal }
  597.   {$EXTERNALSYM MCN_LAST}
  598.   MCN_LAST                 = 0-759;
  599.  
  600.   {$EXTERNALSYM DTN_FIRST}
  601.   DTN_FIRST                = 0-760;       { datetimepick }
  602.   {$EXTERNALSYM DTN_LAST}
  603.   DTN_LAST                 = 0-799;
  604.  
  605.   {$EXTERNALSYM CBEN_FIRST}
  606.   CBEN_FIRST               = 0-800;       { combo box ex }
  607.   {$EXTERNALSYM CBEN_LAST}
  608.   CBEN_LAST                = 0-830;
  609.  
  610.   {$EXTERNALSYM RBN_FIRST}
  611.   RBN_FIRST                = 0-831;       { coolbar }
  612.   {$EXTERNALSYM RBN_LAST}
  613.   RBN_LAST                 = 0-859;
  614.  
  615.   {$EXTERNALSYM IPN_FIRST}
  616.   IPN_FIRST               = 0-860;       { internet address }
  617.   {$EXTERNALSYM IPN_LAST}
  618.   IPN_LAST                = 0-879;       { internet address }
  619.  
  620.   {$EXTERNALSYM SBN_FIRST}
  621.   SBN_FIRST               = 0-880;       { status bar }
  622.   {$EXTERNALSYM SBN_LAST}
  623.   SBN_LAST                = 0-899;
  624.  
  625.   {$EXTERNALSYM PGN_FIRST}
  626.   PGN_FIRST               = 0-900;       { Pager Control }
  627.   {$EXTERNALSYM PGN_LAST}
  628.   PGN_LAST                = 0-950;
  629.  
  630.   {$EXTERNALSYM MSGF_COMMCTRL_BEGINDRAG}
  631.   MSGF_COMMCTRL_BEGINDRAG     = $4200;
  632.   {$EXTERNALSYM MSGF_COMMCTRL_SIZEHEADER}
  633.   MSGF_COMMCTRL_SIZEHEADER    = $4201;
  634.   {$EXTERNALSYM MSGF_COMMCTRL_DRAGSELECT}
  635.   MSGF_COMMCTRL_DRAGSELECT    = $4202;
  636.   {$EXTERNALSYM MSGF_COMMCTRL_TOOLBARCUST}
  637.   MSGF_COMMCTRL_TOOLBARCUST   = $4203;
  638.  
  639.  
  640. { ====== Generic WM_NOTIFY notification codes ================= }
  641.  
  642. const
  643.   {$EXTERNALSYM NM_OUTOFMEMORY}
  644.   NM_OUTOFMEMORY           = NM_FIRST-1;
  645.   {$EXTERNALSYM NM_CLICK}
  646.   NM_CLICK                 = NM_FIRST-2;
  647.   {$EXTERNALSYM NM_DBLCLK}
  648.   NM_DBLCLK                = NM_FIRST-3;
  649.   {$EXTERNALSYM NM_RETURN}
  650.   NM_RETURN                = NM_FIRST-4;
  651.   {$EXTERNALSYM NM_RCLICK}
  652.   NM_RCLICK                = NM_FIRST-5;
  653.   {$EXTERNALSYM NM_RDBLCLK}
  654.   NM_RDBLCLK               = NM_FIRST-6;
  655.   {$EXTERNALSYM NM_SETFOCUS}
  656.   NM_SETFOCUS              = NM_FIRST-7;
  657.   {$EXTERNALSYM NM_KILLFOCUS}
  658.   NM_KILLFOCUS             = NM_FIRST-8;
  659.   {$EXTERNALSYM NM_CUSTOMDRAW}
  660.   NM_CUSTOMDRAW            = NM_FIRST-12;
  661.   {$EXTERNALSYM NM_HOVER}
  662.   NM_HOVER                 = NM_FIRST-13;
  663.   {$EXTERNALSYM NM_NCHITTEST}
  664.   NM_NCHITTEST             = NM_FIRST-14;   // uses NMMOUSE struct
  665.   {$EXTERNALSYM NM_KEYDOWN}
  666.   NM_KEYDOWN               = NM_FIRST-15;   // uses NMKEY struct
  667.   {$EXTERNALSYM NM_RELEASEDCAPTURE}
  668.   NM_RELEASEDCAPTURE       = NM_FIRST-16;
  669.   {$EXTERNALSYM NM_SETCURSOR}
  670.   NM_SETCURSOR             = NM_FIRST-17;   // uses NMMOUSE struct
  671.   {$EXTERNALSYM NM_CHAR}
  672.   NM_CHAR                  = NM_FIRST-18;   // uses NMCHAR struct
  673.  
  674. type
  675.   {$EXTERNALSYM tagNMMOUSE}
  676.   tagNMMOUSE = packed record
  677.     hdr: TNMHdr;
  678.     dwItemSpec: DWORD;
  679.     dwItemData: DWORD;
  680.     pt: TPoint;
  681.     dwHitInfo: DWORD; // any specifics about where on the item or control the mouse is
  682.   end;
  683.   PNMMouse = ^TNMMouse;
  684.   TNMMouse = tagNMMOUSE;
  685.  
  686.   PNMClick = ^TNMClick;
  687.   TNMClick = tagNMMOUSE;
  688.  
  689.   // Generic structure to request an object of a specific type.
  690.   {$EXTERNALSYM tagNMOBJECTNOTIFY}
  691.   tagNMOBJECTNOTIFY = packed record
  692.     hdr: TNMHdr;
  693.     iItem: Integer;
  694.     piid: PGUID;
  695.     pObject: Pointer;
  696.     hResult: HRESULT;
  697.     dwFlags: DWORD;    // control specific flags (hints as to where in iItem it hit)
  698.   end;
  699.   PNMObjectNotify = ^TNMObjectNotify;
  700.   TNMObjectNotify = tagNMOBJECTNOTIFY;
  701.  
  702.   // Generic structure for a key
  703.   {$EXTERNALSYM tagNMKEY}
  704.   tagNMKEY = packed record
  705.     hdr: TNMHdr;
  706.     nVKey: UINT;
  707.     uFlags: UINT;
  708.   end;
  709.   PNMKey = ^TNMKey;
  710.   TNMKey = tagNMKEY;
  711.  
  712.   // Generic structure for a character
  713.   {$EXTERNALSYM tagNMCHAR}
  714.   tagNMCHAR = packed record
  715.     hdr: TNMHdr;
  716.     ch: UINT;
  717.     dwItemPrev: DWORD;     // Item previously selected
  718.     dwItemNext: DWORD;     // Item to be selected
  719.   end;
  720.   PNMChar = ^TNMChar;
  721.   TNMChar = tagNMCHAR;
  722.  
  723. { ==================== CUSTOM DRAW ========================================== }
  724.  
  725. const
  726.   // custom draw return flags
  727.   // values under 0x00010000 are reserved for global custom draw values.
  728.   // above that are for specific controls
  729.   {$EXTERNALSYM CDRF_DODEFAULT}
  730.   CDRF_DODEFAULT          = $00000000;
  731.   {$EXTERNALSYM CDRF_NEWFONT}
  732.   CDRF_NEWFONT            = $00000002;
  733.   {$EXTERNALSYM CDRF_SKIPDEFAULT}
  734.   CDRF_SKIPDEFAULT        = $00000004;
  735.  
  736.   {$EXTERNALSYM CDRF_NOTIFYPOSTPAINT}
  737.   CDRF_NOTIFYPOSTPAINT    = $00000010;
  738.   {$EXTERNALSYM CDRF_NOTIFYITEMDRAW}
  739.   CDRF_NOTIFYITEMDRAW     = $00000020;
  740.   {$EXTERNALSYM CDRF_NOTIFYSUBITEMDRAW}
  741.   CDRF_NOTIFYSUBITEMDRAW  = $00000020;  // flags are the same, we can distinguish by context
  742.   {$EXTERNALSYM CDRF_NOTIFYPOSTERASE}
  743.   CDRF_NOTIFYPOSTERASE    = $00000040;
  744.  
  745.   // drawstage flags
  746.   // values under = $00010000 are reserved for global custom draw values.
  747.   // above that are for specific controls
  748.   {$EXTERNALSYM CDDS_PREPAINT}
  749.   CDDS_PREPAINT           = $00000001;
  750.   {$EXTERNALSYM CDDS_POSTPAINT}
  751.   CDDS_POSTPAINT          = $00000002;
  752.   {$EXTERNALSYM CDDS_PREERASE}
  753.   CDDS_PREERASE           = $00000003;
  754.   {$EXTERNALSYM CDDS_POSTERASE}
  755.   CDDS_POSTERASE          = $00000004;
  756.   // the = $000010000 bit means it's individual item specific
  757.   {$EXTERNALSYM CDDS_ITEM}
  758.   CDDS_ITEM               = $00010000;
  759.   {$EXTERNALSYM CDDS_ITEMPREPAINT}
  760.   CDDS_ITEMPREPAINT       = CDDS_ITEM or CDDS_PREPAINT;
  761.   {$EXTERNALSYM CDDS_ITEMPOSTPAINT}
  762.   CDDS_ITEMPOSTPAINT      = CDDS_ITEM or CDDS_POSTPAINT;
  763.   {$EXTERNALSYM CDDS_ITEMPREERASE}
  764.   CDDS_ITEMPREERASE       = CDDS_ITEM or CDDS_PREERASE;
  765.   {$EXTERNALSYM CDDS_ITEMPOSTERASE}
  766.   CDDS_ITEMPOSTERASE      = CDDS_ITEM or CDDS_POSTERASE;
  767.   {$EXTERNALSYM CDDS_SUBITEM}
  768.   CDDS_SUBITEM            = $00020000;
  769.  
  770.   // itemState flags
  771.   {$EXTERNALSYM CDIS_SELECTED}
  772.   CDIS_SELECTED       = $0001;
  773.   {$EXTERNALSYM CDIS_GRAYED}
  774.   CDIS_GRAYED         = $0002;
  775.   {$EXTERNALSYM CDIS_DISABLED}
  776.   CDIS_DISABLED       = $0004;
  777.   {$EXTERNALSYM CDIS_CHECKED}
  778.   CDIS_CHECKED        = $0008;
  779.   {$EXTERNALSYM CDIS_FOCUS}
  780.   CDIS_FOCUS          = $0010;
  781.   {$EXTERNALSYM CDIS_DEFAULT}
  782.   CDIS_DEFAULT        = $0020;
  783.   {$EXTERNALSYM CDIS_HOT}
  784.   CDIS_HOT            = $0040;
  785.   {$EXTERNALSYM CDIS_MARKED}
  786.   CDIS_MARKED         = $0080;
  787.   {$EXTERNALSYM CDIS_INDETERMINATE}
  788.   CDIS_INDETERMINATE  = $0100;
  789.  
  790. type
  791.   {$EXTERNALSYM tagNMCUSTOMDRAWINFO}
  792.   tagNMCUSTOMDRAWINFO = packed record
  793.     hdr: TNMHdr;
  794.     dwDrawStage: DWORD;
  795.     hdc: HDC;
  796.     rc: TRect;
  797.     dwItemSpec: DWORD;  // this is control specific, but it's how to specify an item.  valid only with CDDS_ITEM bit set
  798.     uItemState: UINT;
  799.     lItemlParam: LPARAM;
  800.   end;
  801.   PNMCustomDraw = ^TNMCustomDraw;
  802.   TNMCustomDraw = tagNMCUSTOMDRAWINFO;
  803.  
  804.   {$EXTERNALSYM tagNMTTCUSTOMDRAW}
  805.   tagNMTTCUSTOMDRAW = packed record
  806.     nmcd: TNMCustomDraw;
  807.     uDrawFlags: UINT;
  808.   end;
  809.   PNMTTCustomDraw = ^TNMTTCustomDraw;
  810.   TNMTTCustomDraw = tagNMTTCUSTOMDRAW;
  811.  
  812. { ====== IMAGE LIST =========================================== }
  813.  
  814. const
  815.   {$EXTERNALSYM CLR_NONE}
  816.   CLR_NONE                = $FFFFFFFF;
  817.   {$EXTERNALSYM CLR_DEFAULT}
  818.   CLR_DEFAULT             = $FF000000;
  819.  
  820. type
  821.   {$EXTERNALSYM HIMAGELIST}
  822.   HIMAGELIST = THandle;
  823.  
  824.   {$EXTERNALSYM _IMAGELISTDRAWPARAMS}
  825.   _IMAGELISTDRAWPARAMS = packed record
  826.     cbSize: DWORD;
  827.     himl: HIMAGELIST;
  828.     i: Integer;
  829.     hdcDst: HDC;
  830.     x: Integer;
  831.     y: Integer;
  832.     cx: Integer;
  833.     cy: Integer;
  834.     xBitmap: Integer;        // x offest from the upperleft of bitmap
  835.     yBitmap: Integer;        // y offset from the upperleft of bitmap
  836.     rgbBk: COLORREF;
  837.     rgbFg: COLORREF;
  838.     fStyle: UINT;
  839.     dwRop: DWORD;
  840.   end;
  841.   PImageListDrawParams = ^TImageListDrawParams;
  842.   TImageListDrawParams = _IMAGELISTDRAWPARAMS;
  843.  
  844. const
  845.   {$EXTERNALSYM ILC_MASK}
  846.   ILC_MASK                = $0001;
  847.   {$EXTERNALSYM ILC_COLOR}
  848.   ILC_COLOR               = $0000;
  849.   {$EXTERNALSYM ILC_COLORDDB}
  850.   ILC_COLORDDB            = $00FE;
  851.   {$EXTERNALSYM ILC_COLOR4}
  852.   ILC_COLOR4              = $0004;
  853.   {$EXTERNALSYM ILC_COLOR8}
  854.   ILC_COLOR8              = $0008;
  855.   {$EXTERNALSYM ILC_COLOR16}
  856.   ILC_COLOR16             = $0010;
  857.   {$EXTERNALSYM ILC_COLOR24}
  858.   ILC_COLOR24             = $0018;
  859.   {$EXTERNALSYM ILC_COLOR32}
  860.   ILC_COLOR32             = $0020;
  861.   {$EXTERNALSYM ILC_PALETTE}
  862.   ILC_PALETTE             = $0800;
  863.  
  864. {$EXTERNALSYM ImageList_Create}
  865. function ImageList_Create(CX, CY: Integer; Flags: UINT;
  866.   Initial, Grow: Integer): HIMAGELIST; stdcall;
  867. {$EXTERNALSYM ImageList_Destroy}
  868. function ImageList_Destroy(ImageList: HIMAGELIST): Bool; stdcall;
  869. {$EXTERNALSYM ImageList_GetImageCount}
  870. function ImageList_GetImageCount(ImageList: HIMAGELIST): Integer; stdcall;
  871. {$EXTERNALSYM ImageList_SetImageCount}
  872. function ImageList_SetImageCount(himl: HIMAGELIST; uNewCount: UINT): Integer; stdcall;
  873. {$EXTERNALSYM ImageList_Add}
  874. function ImageList_Add(ImageList: HIMAGELIST; Image, Mask: HBitmap): Integer; stdcall;
  875. {$EXTERNALSYM ImageList_ReplaceIcon}
  876. function ImageList_ReplaceIcon(ImageList: HIMAGELIST; Index: Integer;
  877.   Icon: HIcon): Integer; stdcall;
  878. {$EXTERNALSYM ImageList_SetBkColor}
  879. function ImageList_SetBkColor(ImageList: HIMAGELIST; ClrBk: TColorRef): TColorRef; stdcall;
  880. {$EXTERNALSYM ImageList_GetBkColor}
  881. function ImageList_GetBkColor(ImageList: HIMAGELIST): TColorRef; stdcall;
  882. {$EXTERNALSYM ImageList_SetOverlayImage}
  883. function ImageList_SetOverlayImage(ImageList: HIMAGELIST; Image: Integer;
  884.   Overlay: Integer): Bool; stdcall;
  885.  
  886. {$EXTERNALSYM ImageList_AddIcon}
  887. function ImageList_AddIcon(ImageList: HIMAGELIST; Icon: HIcon): Integer;
  888.  
  889. const
  890.   {$EXTERNALSYM ILD_NORMAL}
  891.   ILD_NORMAL              = $0000;
  892.   {$EXTERNALSYM ILD_TRANSPARENT}
  893.   ILD_TRANSPARENT         = $0001;
  894.   {$EXTERNALSYM ILD_MASK}
  895.   ILD_MASK                = $0010;
  896.   {$EXTERNALSYM ILD_IMAGE}
  897.   ILD_IMAGE               = $0020;
  898.   {$EXTERNALSYM ILD_ROP}
  899.   ILD_ROP                 = $0040;
  900.   {$EXTERNALSYM ILD_BLEND25}
  901.   ILD_BLEND25             = $0002;
  902.   {$EXTERNALSYM ILD_BLEND50}
  903.   ILD_BLEND50             = $0004;
  904.   {$EXTERNALSYM ILD_OVERLAYMASK}
  905.   ILD_OVERLAYMASK         = $0F00;
  906.  
  907. {$EXTERNALSYM IndexToOverlayMask}
  908. function IndexToOverlayMask(Index: Integer): Integer;
  909.  
  910. const
  911.   {$EXTERNALSYM ILD_SELECTED}
  912.   ILD_SELECTED            = ILD_BLEND50;
  913.   {$EXTERNALSYM ILD_FOCUS}
  914.   ILD_FOCUS               = ILD_BLEND25;
  915.   {$EXTERNALSYM ILD_BLEND}
  916.   ILD_BLEND               = ILD_BLEND50;
  917.   {$EXTERNALSYM CLR_HILIGHT}
  918.   CLR_HILIGHT             = CLR_DEFAULT;
  919.  
  920. {$EXTERNALSYM ImageList_Draw}
  921. function ImageList_Draw(ImageList: HIMAGELIST; Index: Integer;
  922.   Dest: HDC; X, Y: Integer; Style: UINT): Bool; stdcall;
  923.  
  924. {$EXTERNALSYM ImageList_Replace}
  925. function ImageList_Replace(ImageList: HIMAGELIST; Index: Integer;
  926.   Image, Mask: HBitmap): Bool; stdcall;
  927. {$EXTERNALSYM ImageList_AddMasked}
  928. function ImageList_AddMasked(ImageList: HIMAGELIST; Image: HBitmap;
  929.   Mask: TColorRef): Integer; stdcall;
  930. {$EXTERNALSYM ImageList_DrawEx}
  931. function ImageList_DrawEx(ImageList: HIMAGELIST; Index: Integer;
  932.   Dest: HDC; X, Y, DX, DY: Integer; Bk, Fg: TColorRef; Style: Cardinal): Bool; stdcall;
  933. {$EXTERNALSYM ImageList_DrawIndirect}
  934. function ImageList_DrawIndirect(pimldp: PImageListDrawParams): Integer; stdcall;
  935. {$EXTERNALSYM ImageList_Remove}
  936. function ImageList_Remove(ImageList: HIMAGELIST; Index: Integer): Bool; stdcall;
  937. {$EXTERNALSYM ImageList_GetIcon}
  938. function ImageList_GetIcon(ImageList: HIMAGELIST; Index: Integer;
  939.   Flags: Cardinal): HIcon; stdcall;
  940. {$EXTERNALSYM ImageList_LoadImage}
  941. function ImageList_LoadImage(Instance: THandle; Bmp: PChar; CX, Grow: Integer;
  942.   Mask: TColorRef; pType, Flags: Cardinal): HIMAGELIST; stdcall;
  943. {$EXTERNALSYM ImageList_LoadImageA}
  944. function ImageList_LoadImageA(Instance: THandle; Bmp: PAnsiChar; CX, Grow: Integer;
  945.   Mask: TColorRef; pType, Flags: Cardinal): HIMAGELIST; stdcall;
  946. {$EXTERNALSYM ImageList_LoadImageW}
  947. function ImageList_LoadImageW(Instance: THandle; Bmp: PWideChar; CX, Grow: Integer;
  948.   Mask: TColorRef; pType, Flags: Cardinal): HIMAGELIST; stdcall;
  949.  
  950. const
  951.   {$EXTERNALSYM ILCF_MOVE}
  952.   ILCF_MOVE   = $00000000;
  953.   {$EXTERNALSYM ILCF_SWAP}
  954.   ILCF_SWAP   = $00000001;
  955.  
  956. {$EXTERNALSYM ImageList_Copy}
  957. function ImageList_Copy(himlDst: HIMAGELIST; iDst: Integer; himlSrc: HIMAGELIST;
  958.   Src: Integer; uFlags: UINT): Integer; stdcall;
  959.  
  960. {$EXTERNALSYM ImageList_BeginDrag}
  961. function ImageList_BeginDrag(ImageList: HIMAGELIST; Track: Integer;
  962.   XHotSpot, YHotSpot: Integer): Bool; stdcall;
  963. {$EXTERNALSYM ImageList_EndDrag}
  964. function ImageList_EndDrag: Bool; stdcall;
  965. {$EXTERNALSYM ImageList_DragEnter}
  966. function ImageList_DragEnter(LockWnd: HWnd; X, Y: Integer): Bool; stdcall;
  967. {$EXTERNALSYM ImageList_DragLeave}
  968. function ImageList_DragLeave(LockWnd: HWnd): Bool; stdcall;
  969. {$EXTERNALSYM ImageList_DragMove}
  970. function ImageList_DragMove(X, Y: Integer): Bool; stdcall;
  971. {$EXTERNALSYM ImageList_SetDragCursorImage}
  972. function ImageList_SetDragCursorImage(ImageList: HIMAGELIST; Drag: Integer;
  973.   XHotSpot, YHotSpot: Integer): Bool; stdcall;
  974. {$EXTERNALSYM ImageList_DragShowNolock}
  975. function ImageList_DragShowNolock(Show: Bool): Bool; stdcall;
  976. {$EXTERNALSYM ImageList_GetDragImage}
  977. function ImageList_GetDragImage(Point, HotSpot: PPoint): HIMAGELIST; stdcall;
  978.  
  979. { macros }
  980. {$EXTERNALSYM ImageList_RemoveAll}
  981. procedure ImageList_RemoveAll(ImageList: HIMAGELIST);
  982. {$EXTERNALSYM ImageList_ExtractIcon}
  983. function ImageList_ExtractIcon(Instance: THandle; ImageList: HIMAGELIST;
  984.   Image: Integer): HIcon;
  985. {$EXTERNALSYM ImageList_LoadBitmap}
  986. function ImageList_LoadBitmap(Instance: THandle; Bmp: PChar;
  987.   CX, Grow: Integer; MasK: TColorRef): HIMAGELIST;
  988.  
  989. {$EXTERNALSYM ImageList_Read}
  990. function ImageList_Read(Stream: IStream): HIMAGELIST; stdcall;
  991. {$EXTERNALSYM ImageList_Write}
  992. function ImageList_Write(ImageList: HIMAGELIST; Stream: IStream): BOOL; stdcall;
  993.  
  994. type
  995.   PImageInfo = ^TImageInfo;
  996.   {$EXTERNALSYM _IMAGEINFO}
  997.   _IMAGEINFO = packed record
  998.     hbmImage: HBitmap;
  999.     hbmMask: HBitmap;
  1000.     Unused1: Integer;
  1001.     Unused2: Integer;
  1002.     rcImage: TRect;
  1003.   end;
  1004.   TImageInfo = _IMAGEINFO;
  1005.   {$EXTERNALSYM IMAGEINFO}
  1006.   IMAGEINFO = _IMAGEINFO;
  1007.  
  1008. {$EXTERNALSYM ImageList_GetIconSize}
  1009. function ImageList_GetIconSize(ImageList: HIMAGELIST; var CX, CY: Integer): Bool; stdcall;
  1010. {$EXTERNALSYM ImageList_SetIconSize}
  1011. function ImageList_SetIconSize(ImageList: HIMAGELIST; CX, CY: Integer): Bool; stdcall;
  1012. {$EXTERNALSYM ImageList_GetImageInfo}
  1013. function ImageList_GetImageInfo(ImageList: HIMAGELIST; Index: Integer;
  1014.   var ImageInfo: TImageInfo): Bool; stdcall;
  1015. {$EXTERNALSYM ImageList_Merge}
  1016. function ImageList_Merge(ImageList1: HIMAGELIST; Index1: Integer;
  1017.   ImageList2: HIMAGELIST; Index2: Integer; DX, DY: Integer): HIMAGELIST; stdcall;
  1018. {$EXTERNALSYM ImageList_Duplicate}
  1019. function ImageList_Duplicate(himl: HIMAGELIST): HIMAGELIST; stdcall;
  1020.  
  1021. { ====== HEADER CONTROL ========================== }
  1022.  
  1023. const
  1024.   {$EXTERNALSYM WC_HEADER}
  1025.   WC_HEADER = 'SysHeader32';
  1026.  
  1027.   {$EXTERNALSYM HDS_HORZ}
  1028.   HDS_HORZ                = $00000000;
  1029.   {$EXTERNALSYM HDS_BUTTONS}
  1030.   HDS_BUTTONS             = $00000002;
  1031.   {$EXTERNALSYM HDS_HOTTRACK}
  1032.   HDS_HOTTRACK            = $00000004;
  1033.   {$EXTERNALSYM HDS_HIDDEN}
  1034.   HDS_HIDDEN              = $00000008;
  1035.   {$EXTERNALSYM HDS_DRAGDROP}
  1036.   HDS_DRAGDROP            = $00000040;
  1037.   {$EXTERNALSYM HDS_FULLDRAG}
  1038.   HDS_FULLDRAG            = $00000080;
  1039.  
  1040. type
  1041.   PHDItemA = ^THDItemA;
  1042.   PHDItemW = ^THDItemW;
  1043.   PHDItem = PHDItemA;
  1044.   {$EXTERNALSYM _HD_ITEMA}
  1045.   _HD_ITEMA = packed record
  1046.     Mask: Cardinal;
  1047.     cxy: Integer;
  1048.     pszText: PAnsiChar;
  1049.     hbm: HBITMAP;
  1050.     cchTextMax: Integer;
  1051.     fmt: Integer;
  1052.     lParam: LPARAM;
  1053.     iImage: Integer;        // index of bitmap in ImageList
  1054.     iOrder: Integer;        // where to draw this item
  1055.   end;
  1056.   {$EXTERNALSYM _HD_ITEMW}
  1057.   _HD_ITEMW = packed record
  1058.     Mask: Cardinal;
  1059.     cxy: Integer;
  1060.     pszText: PWideChar;
  1061.     hbm: HBITMAP;
  1062.     cchTextMax: Integer;
  1063.     fmt: Integer;
  1064.     lParam: LPARAM;
  1065.     iImage: Integer;        // index of bitmap in ImageList
  1066.     iOrder: Integer;        // where to draw this item
  1067.   end;
  1068.   {$EXTERNALSYM _HD_ITEM}
  1069.   _HD_ITEM = _HD_ITEMA;
  1070.   THDItemA = _HD_ITEMA;
  1071.   THDItemW = _HD_ITEMW;
  1072.   THDItem = THDItemA;
  1073.   {$EXTERNALSYM HD_ITEMA}
  1074.   HD_ITEMA = _HD_ITEMA;
  1075.   {$EXTERNALSYM HD_ITEMW}
  1076.   HD_ITEMW = _HD_ITEMW;
  1077.   {$EXTERNALSYM HD_ITEM}
  1078.   HD_ITEM = HD_ITEMA;
  1079.  
  1080. const
  1081.   {$EXTERNALSYM HDI_WIDTH}
  1082.   HDI_WIDTH               = $0001;
  1083.   {$EXTERNALSYM HDI_HEIGHT}
  1084.   HDI_HEIGHT              = HDI_WIDTH;
  1085.   {$EXTERNALSYM HDI_TEXT}
  1086.   HDI_TEXT                = $0002;
  1087.   {$EXTERNALSYM HDI_FORMAT}
  1088.   HDI_FORMAT              = $0004;
  1089.   {$EXTERNALSYM HDI_LPARAM}
  1090.   HDI_LPARAM              = $0008;
  1091.   {$EXTERNALSYM HDI_BITMAP}
  1092.   HDI_BITMAP              = $0010;
  1093.   {$EXTERNALSYM HDI_IMAGE}
  1094.   HDI_IMAGE               = $0020;
  1095.   {$EXTERNALSYM HDI_DI_SETITEM}
  1096.   HDI_DI_SETITEM          = $0040;
  1097.   {$EXTERNALSYM HDI_ORDER}
  1098.   HDI_ORDER               = $0080;
  1099.  
  1100.   {$EXTERNALSYM HDF_LEFT}
  1101.   HDF_LEFT                = 0;
  1102.   {$EXTERNALSYM HDF_RIGHT}
  1103.   HDF_RIGHT               = 1;
  1104.   {$EXTERNALSYM HDF_CENTER}
  1105.   HDF_CENTER              = 2;
  1106.   {$EXTERNALSYM HDF_JUSTIFYMASK}
  1107.   HDF_JUSTIFYMASK         = $0003;
  1108.   {$EXTERNALSYM HDF_RTLREADING}
  1109.   HDF_RTLREADING          = 4; 
  1110.  
  1111.   {$EXTERNALSYM HDF_OWNERDRAW}
  1112.   HDF_OWNERDRAW           = $8000;
  1113.   {$EXTERNALSYM HDF_STRING}
  1114.   HDF_STRING              = $4000;
  1115.   {$EXTERNALSYM HDF_BITMAP}
  1116.   HDF_BITMAP              = $2000;
  1117.   {$EXTERNALSYM HDF_BITMAP_ON_RIGHT}
  1118.   HDF_BITMAP_ON_RIGHT     = $1000;
  1119.   {$EXTERNALSYM HDF_IMAGE}
  1120.   HDF_IMAGE               = $0800;
  1121.  
  1122.   {$EXTERNALSYM HDM_GETITEMCOUNT}
  1123.   HDM_GETITEMCOUNT        = HDM_FIRST + 0;
  1124.  
  1125. {$EXTERNALSYM Header_GetItemCount}
  1126. function Header_GetItemCount(Header: HWnd): Integer;
  1127.  
  1128. const
  1129.   {$EXTERNALSYM HDM_INSERTITEMW}
  1130.   HDM_INSERTITEMW          = HDM_FIRST + 10;
  1131.   {$EXTERNALSYM HDM_INSERTITEMA}
  1132.   HDM_INSERTITEMA          = HDM_FIRST + 1;
  1133.  
  1134.  
  1135.  
  1136.  
  1137.   {$EXTERNALSYM HDM_INSERTITEM}
  1138.   HDM_INSERTITEM           = HDM_INSERTITEMA;
  1139.  
  1140.  
  1141. {$EXTERNALSYM Header_InsertItem}
  1142. function Header_InsertItem(Header: HWnd; Index: Integer;
  1143.   const Item: THDItem): Integer;
  1144.  
  1145. const
  1146.   {$EXTERNALSYM HDM_DELETEITEM}
  1147.   HDM_DELETEITEM          = HDM_FIRST + 2;
  1148.  
  1149. {$EXTERNALSYM Header_DeleteItem}
  1150. function Header_DeleteItem(Header: HWnd; Index: Integer): Bool;
  1151.  
  1152. const
  1153.   {$EXTERNALSYM HDM_GETITEMW}
  1154.   HDM_GETITEMW             = HDM_FIRST + 11;
  1155.   {$EXTERNALSYM HDM_GETITEMA}
  1156.   HDM_GETITEMA             = HDM_FIRST + 3;
  1157.  
  1158.  
  1159.  
  1160.  
  1161.   {$EXTERNALSYM HDM_GETITEM}
  1162.   HDM_GETITEM              = HDM_GETITEMA;
  1163.  
  1164.  
  1165. {$EXTERNALSYM Header_GetItem}
  1166. function Header_GetItem(Header: HWnd; Index: Integer;
  1167.   var Item: THDItem): Bool;
  1168.  
  1169. const
  1170.   {$EXTERNALSYM HDM_SETITEMA}
  1171.   HDM_SETITEMA            = HDM_FIRST + 4;
  1172.   {$EXTERNALSYM HDM_SETITEMW}
  1173.   HDM_SETITEMW            = HDM_FIRST + 12;
  1174.  
  1175.  
  1176.  
  1177.  
  1178.   {$EXTERNALSYM HDM_SETITEM}
  1179.   HDM_SETITEM             = HDM_SETITEMA;
  1180.  
  1181.  
  1182. {$EXTERNALSYM Header_SetItem}
  1183. function Header_SetItem(Header: HWnd; Index: Integer; const Item: THDItem): Bool;
  1184.  
  1185. type
  1186.   PHDLayout = ^THDLayout;
  1187.   {$EXTERNALSYM _HD_LAYOUT}
  1188.   _HD_LAYOUT = packed record
  1189.     Rect: ^TRect;
  1190.     WindowPos: PWindowPos;
  1191.   end;
  1192.   THDLayout = _HD_LAYOUT;
  1193.   {$EXTERNALSYM HD_LAYOUT}
  1194.   HD_LAYOUT = _HD_LAYOUT;
  1195.  
  1196. const
  1197.   {$EXTERNALSYM HDM_LAYOUT}
  1198.   HDM_LAYOUT              = HDM_FIRST + 5;
  1199.  
  1200. {$EXTERNALSYM Header_Layout}
  1201. function Header_Layout(Header: HWnd; Layout: PHDLayout): Bool;
  1202.  
  1203. const
  1204.   {$EXTERNALSYM HHT_NOWHERE}
  1205.   HHT_NOWHERE             = $0001;
  1206.   {$EXTERNALSYM HHT_ONHEADER}
  1207.   HHT_ONHEADER            = $0002;
  1208.   {$EXTERNALSYM HHT_ONDIVIDER}
  1209.   HHT_ONDIVIDER           = $0004;
  1210.   {$EXTERNALSYM HHT_ONDIVOPEN}
  1211.   HHT_ONDIVOPEN           = $0008;
  1212.   {$EXTERNALSYM HHT_ABOVE}
  1213.   HHT_ABOVE               = $0100;
  1214.   {$EXTERNALSYM HHT_BELOW}
  1215.   HHT_BELOW               = $0200;
  1216.   {$EXTERNALSYM HHT_TORIGHT}
  1217.   HHT_TORIGHT             = $0400;
  1218.   {$EXTERNALSYM HHT_TOLEFT}
  1219.   HHT_TOLEFT              = $0800;
  1220.  
  1221. type
  1222.   PHDHitTestInfo = ^THDHitTestInfo;
  1223.   {$EXTERNALSYM _HD_HITTESTINFO}
  1224.   _HD_HITTESTINFO = packed record
  1225.     Point: TPoint;
  1226.     Flags: Cardinal;
  1227.     Item: Integer;
  1228.   end;
  1229.   THDHitTestInfo = _HD_HITTESTINFO;
  1230.   {$EXTERNALSYM HD_HITTESTINFO}
  1231.   HD_HITTESTINFO = _HD_HITTESTINFO;
  1232.  
  1233. const
  1234.   {$EXTERNALSYM HDM_HITTEST}
  1235.   HDM_HITTEST             = HDM_FIRST + 6;
  1236.   {$EXTERNALSYM HDM_GETITEMRECT}
  1237.   HDM_GETITEMRECT         = HDM_FIRST + 7;
  1238.   {$EXTERNALSYM HDM_SETIMAGELIST}
  1239.   HDM_SETIMAGELIST        = HDM_FIRST + 8;
  1240.   {$EXTERNALSYM HDM_GETIMAGELIST}
  1241.   HDM_GETIMAGELIST        = HDM_FIRST + 9;
  1242.   {$EXTERNALSYM HDM_ORDERTOINDEX}
  1243.   HDM_ORDERTOINDEX        = HDM_FIRST + 15;
  1244.   {$EXTERNALSYM HDM_CREATEDRAGIMAGE}
  1245.   HDM_CREATEDRAGIMAGE     = HDM_FIRST + 16;  // wparam = which item = by index;
  1246.   {$EXTERNALSYM HDM_GETORDERARRAY}
  1247.   HDM_GETORDERARRAY       = HDM_FIRST + 17;
  1248.   {$EXTERNALSYM HDM_SETORDERARRAY}
  1249.   HDM_SETORDERARRAY       = HDM_FIRST + 18;
  1250.   {$EXTERNALSYM HDM_SETHOTDIVIDER}
  1251.   HDM_SETHOTDIVIDER       = HDM_FIRST + 19;
  1252.   {$EXTERNALSYM HDM_SETUNICODEFORMAT}
  1253.   HDM_SETUNICODEFORMAT    = CCM_SETUNICODEFORMAT;
  1254.   {$EXTERNALSYM HDM_GETUNICODEFORMAT}
  1255.   HDM_GETUNICODEFORMAT    = CCM_GETUNICODEFORMAT;
  1256.  
  1257. {$EXTERNALSYM Header_GetItemRect}
  1258. function Header_GetItemRect(hwnd: HWND; iItem: Integer; lprc: PRect): Integer;
  1259. {$EXTERNALSYM Header_SetImageList}
  1260. function Header_SetImageList(hwnd: HWND; himl: HIMAGELIST): HIMAGELIST;
  1261. {$EXTERNALSYM Header_GetImageList}
  1262. function Header_GetImageList(hwnd: HWND): HIMAGELIST;
  1263. {$EXTERNALSYM Header_OrderToIndex}
  1264. function Header_OrderToIndex(hwnd: HWND; i: Integer): Integer;
  1265. {$EXTERNALSYM Header_CreateDragImage}
  1266. function Header_CreateDragImage(hwnd: HWND; i: Integer): HIMAGELIST;
  1267. {$EXTERNALSYM Header_GetOrderArray}
  1268. function Header_GetOrderArray(hwnd: HWND; iCount: Integer; lpi: PInteger): Integer;
  1269. {$EXTERNALSYM Header_SetOrderArray}
  1270. function Header_SetOrderArray(hwnd: HWND; iCount: Integer; lpi: PInteger): Integer;
  1271.  
  1272. // lparam = int array of size HDM_GETITEMCOUNT
  1273. // the array specifies the order that all items should be displayed.
  1274. // e.g.  { 2, 0, 1}
  1275. // says the index 2 item should be shown in the 0ths position
  1276. //      index 0 should be shown in the 1st position
  1277. //      index 1 should be shown in the 2nd position
  1278.  
  1279. {$EXTERNALSYM Header_SetHotDivider}
  1280. function Header_SetHotDivider(hwnd: HWND; fPos: BOOL; dw: DWORD): Integer;
  1281.  
  1282. // convenience message for external dragdrop
  1283. // wParam = BOOL  specifying whether the lParam is a dwPos of the cursor
  1284. //              position or the index of which divider to hotlight
  1285. // lParam = depends on wParam  (-1 and wParm = FALSE turns off hotlight)
  1286.  
  1287. {$EXTERNALSYM Header_SetUnicodeFormat}
  1288. function Header_SetUnicodeFormat(hwnd: HWND; fUnicode: BOOL): Integer;
  1289. {$EXTERNALSYM Header_GetUnicodeFormat}
  1290. function Header_GetUnicodeFormat(hwnd: HWND): Integer;
  1291.  
  1292. const
  1293.   {$EXTERNALSYM HDN_ITEMCHANGINGA}
  1294.   HDN_ITEMCHANGINGA        = HDN_FIRST-0;
  1295.   {$EXTERNALSYM HDN_ITEMCHANGEDA}
  1296.   HDN_ITEMCHANGEDA         = HDN_FIRST-1;
  1297.   {$EXTERNALSYM HDN_ITEMCLICKA}
  1298.   HDN_ITEMCLICKA           = HDN_FIRST-2;
  1299.   {$EXTERNALSYM HDN_ITEMDBLCLICKA}
  1300.   HDN_ITEMDBLCLICKA        = HDN_FIRST-3;
  1301.   {$EXTERNALSYM HDN_DIVIDERDBLCLICKA}
  1302.   HDN_DIVIDERDBLCLICKA     = HDN_FIRST-5;
  1303.   {$EXTERNALSYM HDN_BEGINTRACKA}
  1304.   HDN_BEGINTRACKA          = HDN_FIRST-6;
  1305.   {$EXTERNALSYM HDN_ENDTRACKA}
  1306.   HDN_ENDTRACKA            = HDN_FIRST-7;
  1307.   {$EXTERNALSYM HDN_TRACKA}
  1308.   HDN_TRACKA               = HDN_FIRST-8;
  1309.   {$EXTERNALSYM HDN_GETDISPINFOA}
  1310.   HDN_GETDISPINFOA         = HDN_FIRST-9;
  1311.   {$EXTERNALSYM HDN_BEGINDRAG}
  1312.   HDN_BEGINDRAG            = HDN_FIRST-10;
  1313.   {$EXTERNALSYM HDN_ENDDRAG}
  1314.   HDN_ENDDRAG              = HDN_FIRST-11;
  1315.  
  1316.   {$EXTERNALSYM HDN_ITEMCHANGINGW}
  1317.   HDN_ITEMCHANGINGW        = HDN_FIRST-20;
  1318.   {$EXTERNALSYM HDN_ITEMCHANGEDW}
  1319.   HDN_ITEMCHANGEDW         = HDN_FIRST-21;
  1320.   {$EXTERNALSYM HDN_ITEMCLICKW}
  1321.   HDN_ITEMCLICKW           = HDN_FIRST-22;
  1322.   {$EXTERNALSYM HDN_ITEMDBLCLICKW}
  1323.   HDN_ITEMDBLCLICKW        = HDN_FIRST-23;
  1324.   {$EXTERNALSYM HDN_DIVIDERDBLCLICKW}
  1325.   HDN_DIVIDERDBLCLICKW     = HDN_FIRST-25;
  1326.   {$EXTERNALSYM HDN_BEGINTRACKW}
  1327.   HDN_BEGINTRACKW          = HDN_FIRST-26;
  1328.   {$EXTERNALSYM HDN_ENDTRACKW}
  1329.   HDN_ENDTRACKW            = HDN_FIRST-27;
  1330.   {$EXTERNALSYM HDN_TRACKW}
  1331.   HDN_TRACKW               = HDN_FIRST-28;
  1332.   {$EXTERNALSYM HDN_GETDISPINFOW}
  1333.   HDN_GETDISPINFOW         = HDN_FIRST-29;
  1334.  
  1335.  
  1336.  
  1337.  
  1338.  
  1339.  
  1340.  
  1341.  
  1342.  
  1343.  
  1344.  
  1345.  
  1346.  
  1347.  
  1348.  
  1349.  
  1350.  
  1351.  
  1352.  
  1353.  
  1354.  
  1355.   {$EXTERNALSYM HDN_ITEMCHANGING}
  1356.   HDN_ITEMCHANGING        = HDN_ITEMCHANGINGA;
  1357.   {$EXTERNALSYM HDN_ITEMCHANGED}
  1358.   HDN_ITEMCHANGED         = HDN_ITEMCHANGEDA;
  1359.   {$EXTERNALSYM HDN_ITEMCLICK}
  1360.   HDN_ITEMCLICK           = HDN_ITEMCLICKA;
  1361.   {$EXTERNALSYM HDN_ITEMDBLCLICK}
  1362.   HDN_ITEMDBLCLICK        = HDN_ITEMDBLCLICKA;
  1363.   {$EXTERNALSYM HDN_DIVIDERDBLCLICK}
  1364.   HDN_DIVIDERDBLCLICK     = HDN_DIVIDERDBLCLICKA;
  1365.   {$EXTERNALSYM HDN_BEGINTRACK}
  1366.   HDN_BEGINTRACK          = HDN_BEGINTRACKA;
  1367.   {$EXTERNALSYM HDN_ENDTRACK}
  1368.   HDN_ENDTRACK            = HDN_ENDTRACKA;
  1369.   {$EXTERNALSYM HDN_TRACK}
  1370.   HDN_TRACK               = HDN_TRACKA;
  1371.   {$EXTERNALSYM HDN_GETDISPINFO}
  1372.   HDN_GETDISPINFO         = HDN_GETDISPINFOA;
  1373.  
  1374.  
  1375. type
  1376.   {$EXTERNALSYM tagNMHEADERA}
  1377.   tagNMHEADERA = packed record
  1378.     Hdr: TNMHdr;
  1379.     Item: Integer;
  1380.     Button: Integer;
  1381.     PItem: PHDItemA;
  1382.   end;
  1383.   {$EXTERNALSYM tagNMHEADERW}
  1384.   tagNMHEADERW = packed record
  1385.     Hdr: TNMHdr;
  1386.     Item: Integer;
  1387.     Button: Integer;
  1388.     PItem: PHDItemW;
  1389.   end;
  1390.   {$EXTERNALSYM tagNMHEADER}
  1391.   tagNMHEADER = tagNMHEADERA;
  1392.   {$EXTERNALSYM HD_NOTIFYA}
  1393.   HD_NOTIFYA = tagNMHEADERA;
  1394.   {$EXTERNALSYM HD_NOTIFYW}
  1395.   HD_NOTIFYW = tagNMHEADERW;
  1396.   {$EXTERNALSYM HD_NOTIFY}
  1397.   HD_NOTIFY = HD_NOTIFYA;
  1398.   PHDNotifyA = ^THDNotifyA;
  1399.   PHDNotifyW = ^THDNotifyW;
  1400.   PHDNotify = PHDNotifyA;
  1401.   THDNotifyA = tagNMHEADERA;
  1402.   THDNotifyW = tagNMHEADERW;
  1403.   THDNotify = THDNotifyA;
  1404.  
  1405.   {$EXTERNALSYM tagNMHDDISPINFOA}
  1406.   tagNMHDDISPINFOA = packed record
  1407.     hdr: TNMHdr;
  1408.     iItem: Integer;
  1409.     mask: UINT;
  1410.     pszText: PAnsiChar;
  1411.     cchTextMax: Integer;
  1412.     iImage: Integer;
  1413.     lParam: LPARAM;
  1414.   end;
  1415.   {$EXTERNALSYM tagNMHDDISPINFOW}
  1416.   tagNMHDDISPINFOW = packed record
  1417.     hdr: TNMHdr;
  1418.     iItem: Integer;
  1419.     mask: UINT;
  1420.     pszText: PWideChar;
  1421.     cchTextMax: Integer;
  1422.     iImage: Integer;
  1423.     lParam: LPARAM;
  1424.   end;
  1425.   {$EXTERNALSYM tagNMHDDISPINFO}
  1426.   tagNMHDDISPINFO = tagNMHDDISPINFOA;
  1427.   PNMHDispInfoA = ^TNMHDispInfoA;
  1428.   PNMHDispInfoW = ^TNMHDispInfoW;
  1429.   PNMHDispInfo = PNMHDispInfoA;
  1430.   TNMHDispInfoA = tagNMHDDISPINFOA;
  1431.   TNMHDispInfoW = tagNMHDDISPINFOW;
  1432.   TNMHDispInfo = TNMHDispInfoA;
  1433.  
  1434.  
  1435. { ====== TOOLBAR CONTROL =================== }
  1436.  
  1437. const
  1438.   {$EXTERNALSYM TOOLBARCLASSNAME}
  1439.   TOOLBARCLASSNAME = 'ToolbarWindow32';
  1440.  
  1441. type
  1442.   PTBButton = ^TTBButton;
  1443.   {$EXTERNALSYM _TBBUTTON}
  1444.   _TBBUTTON = packed record
  1445.     iBitmap: Integer;
  1446.     idCommand: Integer;
  1447.     fsState: Byte;
  1448.     fsStyle: Byte;
  1449.     bReserved: array[1..2] of Byte;
  1450.     dwData: Longint;
  1451.     iString: Integer;
  1452.   end;
  1453.   TTBButton = _TBBUTTON;
  1454.  
  1455.   PColorMap = ^TColorMap;
  1456.   {$EXTERNALSYM _COLORMAP}
  1457.   _COLORMAP = packed record
  1458.     cFrom: TColorRef;
  1459.     cTo: TColorRef;
  1460.   end;
  1461.   TColorMap = _COLORMAP;
  1462.   {$EXTERNALSYM COLORMAP}
  1463.   COLORMAP = _COLORMAP;
  1464.  
  1465. {$EXTERNALSYM CreateToolBarEx}
  1466. function CreateToolBarEx(Wnd: HWnd; ws: Longint; ID: UINT;
  1467.   Bitmaps: Integer; BMInst: THandle; BMID: Cardinal; Buttons: PTBButton;
  1468.   NumButtons: Integer; dxButton, dyButton: Integer;
  1469.   dxBitmap, dyBitmap: Integer; StructSize: UINT): HWnd; stdcall;
  1470.  
  1471. {$EXTERNALSYM CreateMappedBitmap}
  1472. function CreateMappedBitmap(Instance: THandle; Bitmap: Integer;
  1473.   Flags: UINT; ColorMap: PColorMap; NumMaps: Integer): HBitmap; stdcall;
  1474.  
  1475. const
  1476.  
  1477.   {$EXTERNALSYM CMB_MASKED}
  1478.   CMB_MASKED              = $02;
  1479.  
  1480.   {$EXTERNALSYM TBSTATE_CHECKED}
  1481.   TBSTATE_CHECKED         = $01;
  1482.   {$EXTERNALSYM TBSTATE_PRESSED}
  1483.   TBSTATE_PRESSED         = $02;
  1484.   {$EXTERNALSYM TBSTATE_ENABLED}
  1485.   TBSTATE_ENABLED         = $04;
  1486.   {$EXTERNALSYM TBSTATE_HIDDEN}
  1487.   TBSTATE_HIDDEN          = $08;
  1488.   {$EXTERNALSYM TBSTATE_INDETERMINATE}
  1489.   TBSTATE_INDETERMINATE   = $10;
  1490.   {$EXTERNALSYM TBSTATE_WRAP}
  1491.   TBSTATE_WRAP            = $20;
  1492.   {$EXTERNALSYM TBSTATE_ELLIPSES}
  1493.   TBSTATE_ELLIPSES        = $40;
  1494.   {$EXTERNALSYM TBSTATE_MARKED}
  1495.   TBSTATE_MARKED          = $80;
  1496.  
  1497.   {$EXTERNALSYM TBSTYLE_BUTTON}
  1498.   TBSTYLE_BUTTON          = $00;
  1499.   {$EXTERNALSYM TBSTYLE_SEP}
  1500.   TBSTYLE_SEP             = $01;
  1501.   {$EXTERNALSYM TBSTYLE_CHECK}
  1502.   TBSTYLE_CHECK           = $02;
  1503.   {$EXTERNALSYM TBSTYLE_GROUP}
  1504.   TBSTYLE_GROUP           = $04;
  1505.   {$EXTERNALSYM TBSTYLE_CHECKGROUP}
  1506.   TBSTYLE_CHECKGROUP      = TBSTYLE_GROUP or TBSTYLE_CHECK;
  1507.   {$EXTERNALSYM TBSTYLE_DROPDOWN}
  1508.   TBSTYLE_DROPDOWN        = $08;
  1509.   {$EXTERNALSYM TBSTYLE_AUTOSIZE}
  1510.   TBSTYLE_AUTOSIZE        = $0010; // automatically calculate the cx of the button
  1511.   {$EXTERNALSYM TBSTYLE_NOPREFIX}
  1512.   TBSTYLE_NOPREFIX        = $0020; // if this button should not have accel prefix
  1513.  
  1514.   {$EXTERNALSYM TBSTYLE_TOOLTIPS}
  1515.   TBSTYLE_TOOLTIPS        = $0100;
  1516.   {$EXTERNALSYM TBSTYLE_WRAPABLE}
  1517.   TBSTYLE_WRAPABLE        = $0200;
  1518.   {$EXTERNALSYM TBSTYLE_ALTDRAG}
  1519.   TBSTYLE_ALTDRAG         = $0400;
  1520.   {$EXTERNALSYM TBSTYLE_FLAT}
  1521.   TBSTYLE_FLAT            = $0800;
  1522.   {$EXTERNALSYM TBSTYLE_LIST}
  1523.   TBSTYLE_LIST            = $1000;
  1524.   {$EXTERNALSYM TBSTYLE_CUSTOMERASE}
  1525.   TBSTYLE_CUSTOMERASE     = $2000;
  1526.   {$EXTERNALSYM TBSTYLE_REGISTERDROP}
  1527.   TBSTYLE_REGISTERDROP    = $4000;
  1528.   {$EXTERNALSYM TBSTYLE_TRANSPARENT}
  1529.   TBSTYLE_TRANSPARENT     = $8000;
  1530.   {$EXTERNALSYM TBSTYLE_EX_DRAWDDARROWS}
  1531.   TBSTYLE_EX_DRAWDDARROWS = $00000001;
  1532.  
  1533. type
  1534.   // Custom Draw Structure
  1535.   {$EXTERNALSYM _NMTBCUSTOMDRAW}
  1536.   _NMTBCUSTOMDRAW = packed record
  1537.     nmcd: TNMCustomDraw;
  1538.     hbrMonoDither: HBRUSH;
  1539.     hbrLines: HBRUSH;                // For drawing lines on buttons
  1540.     hpenLines: HPEN;                 // For drawing lines on buttons
  1541.     clrText: COLORREF;               // Color of text
  1542.     clrMark: COLORREF;               // Color of text bk when marked. (only if TBSTATE_MARKED)
  1543.     clrTextHighlight: COLORREF;      // Color of text when highlighted
  1544.     clrBtnFace: COLORREF;            // Background of the button
  1545.     clrBtnHighlight: COLORREF;       // 3D highlight
  1546.     clrHighlightHotTrack: COLORREF;  // In conjunction with fHighlightHotTrack
  1547.                                      // will cause button to highlight like a menu
  1548.     rcText: TRect;                   // Rect for text
  1549.     nStringBkMode: Integer;
  1550.     nHLStringBkMode: Integer;
  1551.   end;
  1552.   PNMTBCustomDraw = ^TNMTBCustomDraw;
  1553.   TNMTBCustomDraw = _NMTBCUSTOMDRAW;
  1554.  
  1555. const
  1556.   // Toolbar custom draw return flags
  1557.   {$EXTERNALSYM TBCDRF_NOEDGES}
  1558.   TBCDRF_NOEDGES              = $00010000;  // Don't draw button edges
  1559.   {$EXTERNALSYM TBCDRF_HILITEHOTTRACK}
  1560.   TBCDRF_HILITEHOTTRACK       = $00020000;  // Use color of the button bk when hottracked
  1561.   {$EXTERNALSYM TBCDRF_NOOFFSET}
  1562.   TBCDRF_NOOFFSET             = $00040000;  // Don't offset button if pressed
  1563.   {$EXTERNALSYM TBCDRF_NOMARK}
  1564.   TBCDRF_NOMARK               = $00080000;  // Don't draw default highlight of image/text for TBSTATE_MARKED
  1565.   {$EXTERNALSYM TBCDRF_NOETCHEDEFFECT}
  1566.   TBCDRF_NOETCHEDEFFECT       = $00100000;  // Don't draw etched effect for disabled items
  1567.  
  1568.   {$EXTERNALSYM TB_ENABLEBUTTON}
  1569.   TB_ENABLEBUTTON         = WM_USER + 1;
  1570.   {$EXTERNALSYM TB_CHECKBUTTON}
  1571.   TB_CHECKBUTTON          = WM_USER + 2;
  1572.   {$EXTERNALSYM TB_PRESSBUTTON}
  1573.   TB_PRESSBUTTON          = WM_USER + 3;
  1574.   {$EXTERNALSYM TB_HIDEBUTTON}
  1575.   TB_HIDEBUTTON           = WM_USER + 4;
  1576.   {$EXTERNALSYM TB_INDETERMINATE}
  1577.   TB_INDETERMINATE        = WM_USER + 5;
  1578.   {$EXTERNALSYM TB_MARKBUTTON}
  1579.   TB_MARKBUTTON           = WM_USER + 6;
  1580.   {$EXTERNALSYM TB_ISBUTTONENABLED}
  1581.   TB_ISBUTTONENABLED      = WM_USER + 9;
  1582.   {$EXTERNALSYM TB_ISBUTTONCHECKED}
  1583.   TB_ISBUTTONCHECKED      = WM_USER + 10;
  1584.   {$EXTERNALSYM TB_ISBUTTONPRESSED}
  1585.   TB_ISBUTTONPRESSED      = WM_USER + 11;
  1586.   {$EXTERNALSYM TB_ISBUTTONHIDDEN}
  1587.   TB_ISBUTTONHIDDEN       = WM_USER + 12;
  1588.   {$EXTERNALSYM TB_ISBUTTONINDETERMINATE}
  1589.   TB_ISBUTTONINDETERMINATE = WM_USER + 13;
  1590.   {$EXTERNALSYM TB_ISBUTTONHIGHLIGHTED}
  1591.   TB_ISBUTTONHIGHLIGHTED   = WM_USER + 14;
  1592.   {$EXTERNALSYM TB_SETSTATE}
  1593.   TB_SETSTATE             = WM_USER + 17;
  1594.   {$EXTERNALSYM TB_GETSTATE}
  1595.   TB_GETSTATE             = WM_USER + 18;
  1596.   {$EXTERNALSYM TB_ADDBITMAP}
  1597.   TB_ADDBITMAP            = WM_USER + 19;
  1598.  
  1599. type
  1600.   PTBAddBitmap = ^TTBAddBitmap;
  1601.   {$EXTERNALSYM tagTBADDBITMAP}
  1602.   tagTBADDBITMAP = packed record
  1603.     hInst: THandle;
  1604.     nID: UINT;
  1605.   end;
  1606.   TTBAddBitmap = tagTBADDBITMAP;
  1607.   {$EXTERNALSYM TBADDBITMAP}
  1608.   TBADDBITMAP = tagTBADDBITMAP;
  1609.  
  1610. const
  1611.   {$EXTERNALSYM HINST_COMMCTRL}
  1612.   HINST_COMMCTRL = THandle(-1);
  1613.  
  1614.   {$EXTERNALSYM IDB_STD_SMALL_COLOR}
  1615.   IDB_STD_SMALL_COLOR     = 0;
  1616.   {$EXTERNALSYM IDB_STD_LARGE_COLOR}
  1617.   IDB_STD_LARGE_COLOR     = 1;
  1618.   {$EXTERNALSYM IDB_VIEW_SMALL_COLOR}
  1619.   IDB_VIEW_SMALL_COLOR    = 4;
  1620.   {$EXTERNALSYM IDB_VIEW_LARGE_COLOR}
  1621.   IDB_VIEW_LARGE_COLOR    = 5;
  1622.   {$EXTERNALSYM IDB_HIST_SMALL_COLOR}
  1623.   IDB_HIST_SMALL_COLOR    = 8;
  1624.   {$EXTERNALSYM IDB_HIST_LARGE_COLOR}
  1625.   IDB_HIST_LARGE_COLOR    = 9;
  1626.  
  1627. { icon indexes for standard bitmap }
  1628.   {$EXTERNALSYM STD_CUT}
  1629.   STD_CUT                 = 0;
  1630.   {$EXTERNALSYM STD_COPY}
  1631.   STD_COPY                = 1;
  1632.   {$EXTERNALSYM STD_PASTE}
  1633.   STD_PASTE               = 2;
  1634.   {$EXTERNALSYM STD_UNDO}
  1635.   STD_UNDO                = 3;
  1636.   {$EXTERNALSYM STD_REDOW}
  1637.   STD_REDOW               = 4;
  1638.   {$EXTERNALSYM STD_DELETE}
  1639.   STD_DELETE              = 5;
  1640.   {$EXTERNALSYM STD_FILENEW}
  1641.   STD_FILENEW             = 6;
  1642.   {$EXTERNALSYM STD_FILEOPEN}
  1643.   STD_FILEOPEN            = 7;
  1644.   {$EXTERNALSYM STD_FILESAVE}
  1645.   STD_FILESAVE            = 8;
  1646.   {$EXTERNALSYM STD_PRINTPRE}
  1647.   STD_PRINTPRE            = 9;
  1648.   {$EXTERNALSYM STD_PROPERTIES}
  1649.   STD_PROPERTIES          = 10;
  1650.   {$EXTERNALSYM STD_HELP}
  1651.   STD_HELP                = 11;
  1652.   {$EXTERNALSYM STD_FIND}
  1653.   STD_FIND                = 12;
  1654.   {$EXTERNALSYM STD_REPLACE}
  1655.   STD_REPLACE             = 13;
  1656.   {$EXTERNALSYM STD_PRINT}
  1657.   STD_PRINT               = 14;
  1658.  
  1659. { icon indexes for standard view bitmap }
  1660.  
  1661.   {$EXTERNALSYM VIEW_LARGEICONS}
  1662.   VIEW_LARGEICONS         = 0;
  1663.   {$EXTERNALSYM VIEW_SMALLICONS}
  1664.   VIEW_SMALLICONS         = 1;
  1665.   {$EXTERNALSYM VIEW_LIST}
  1666.   VIEW_LIST               = 2;
  1667.   {$EXTERNALSYM VIEW_DETAILS}
  1668.   VIEW_DETAILS            = 3;
  1669.   {$EXTERNALSYM VIEW_SORTNAME}
  1670.   VIEW_SORTNAME           = 4;
  1671.   {$EXTERNALSYM VIEW_SORTSIZE}
  1672.   VIEW_SORTSIZE           = 5;
  1673.   {$EXTERNALSYM VIEW_SORTDATE}
  1674.   VIEW_SORTDATE           = 6;
  1675.   {$EXTERNALSYM VIEW_SORTTYPE}
  1676.   VIEW_SORTTYPE           = 7;
  1677.   {$EXTERNALSYM VIEW_PARENTFOLDER}
  1678.   VIEW_PARENTFOLDER       = 8;
  1679.   {$EXTERNALSYM VIEW_NETCONNECT}
  1680.   VIEW_NETCONNECT         = 9;
  1681.   {$EXTERNALSYM VIEW_NETDISCONNECT}
  1682.   VIEW_NETDISCONNECT      = 10;
  1683.   {$EXTERNALSYM VIEW_NEWFOLDER}
  1684.   VIEW_NEWFOLDER          = 11;
  1685.   {$EXTERNALSYM VIEW_VIEWMENU}
  1686.   VIEW_VIEWMENU           = 12;
  1687.  
  1688. { icon indexes for history bitmap }
  1689.  
  1690.   {$EXTERNALSYM HIST_BACK}
  1691.   HIST_BACK               = 0;
  1692.   {$EXTERNALSYM HIST_FORWARD}
  1693.   HIST_FORWARD            = 1;
  1694.   {$EXTERNALSYM HIST_FAVORITES}
  1695.   HIST_FAVORITES          = 2;
  1696.   {$EXTERNALSYM HIST_ADDTOFAVORITES}
  1697.   HIST_ADDTOFAVORITES     = 3;
  1698.   {$EXTERNALSYM HIST_VIEWTREE}
  1699.   HIST_VIEWTREE           = 4;
  1700.  
  1701.   {$EXTERNALSYM TB_ADDBUTTONSA}
  1702.   TB_ADDBUTTONSA          = WM_USER + 20;
  1703.   {$EXTERNALSYM TB_INSERTBUTTONA}
  1704.   TB_INSERTBUTTONA        = WM_USER + 21;
  1705.   {$EXTERNALSYM TB_DELETEBUTTON}
  1706.   TB_DELETEBUTTON         = WM_USER + 22;
  1707.   {$EXTERNALSYM TB_GETBUTTON}
  1708.   TB_GETBUTTON            = WM_USER + 23;
  1709.   {$EXTERNALSYM TB_BUTTONCOUNT}
  1710.   TB_BUTTONCOUNT          = WM_USER + 24;
  1711.   {$EXTERNALSYM TB_COMMANDTOINDEX}
  1712.   TB_COMMANDTOINDEX       = WM_USER + 25;
  1713.  
  1714. type
  1715.   PTBSaveParamsA = ^TTBSaveParamsA;
  1716.   PTBSaveParamsW = ^TTBSaveParamsW;
  1717.   PTBSaveParams = PTBSaveParamsA;
  1718.   {$EXTERNALSYM tagTBSAVEPARAMSA}
  1719.   tagTBSAVEPARAMSA = packed record
  1720.     hkr: THandle;
  1721.     pszSubKey: PAnsiChar;
  1722.     pszValueName: PAnsiChar;
  1723.   end;
  1724.   {$EXTERNALSYM tagTBSAVEPARAMSW}
  1725.   tagTBSAVEPARAMSW = packed record
  1726.     hkr: THandle;
  1727.     pszSubKey: PWideChar;
  1728.     pszValueName: PWideChar;
  1729.   end;
  1730.   {$EXTERNALSYM tagTBSAVEPARAMS}
  1731.   tagTBSAVEPARAMS = tagTBSAVEPARAMSA;
  1732.   TTBSaveParamsA = tagTBSAVEPARAMSA;
  1733.   TTBSaveParamsW = tagTBSAVEPARAMSW;
  1734.   TTBSaveParams = TTBSaveParamsA;
  1735.   {$EXTERNALSYM TBSAVEPARAMSA}
  1736.   TBSAVEPARAMSA = tagTBSAVEPARAMSA;
  1737.   {$EXTERNALSYM TBSAVEPARAMSW}
  1738.   TBSAVEPARAMSW = tagTBSAVEPARAMSW;
  1739.   {$EXTERNALSYM TBSAVEPARAMS}
  1740.   TBSAVEPARAMS = TBSAVEPARAMSA;
  1741.  
  1742. const
  1743.   {$EXTERNALSYM TB_SAVERESTOREA}
  1744.   TB_SAVERESTOREA          = WM_USER + 26;
  1745.   {$EXTERNALSYM TB_ADDSTRINGA}
  1746.   TB_ADDSTRINGA            = WM_USER + 28;
  1747.   {$EXTERNALSYM TB_GETBUTTONTEXTA}
  1748.   TB_GETBUTTONTEXTA        = WM_USER + 45;
  1749.   {$EXTERNALSYM TBN_GETBUTTONINFOA}
  1750.   TBN_GETBUTTONINFOA       = TBN_FIRST-0;
  1751.  
  1752.   {$EXTERNALSYM TB_SAVERESTOREW}
  1753.   TB_SAVERESTOREW          = WM_USER + 76;
  1754.   {$EXTERNALSYM TB_ADDSTRINGW}
  1755.   TB_ADDSTRINGW            = WM_USER + 77;
  1756.   {$EXTERNALSYM TB_GETBUTTONTEXTW}
  1757.   TB_GETBUTTONTEXTW        = WM_USER + 75;
  1758.   {$EXTERNALSYM TBN_GETBUTTONINFOW}
  1759.   TBN_GETBUTTONINFOW       = TBN_FIRST-20;
  1760.  
  1761.  
  1762.  
  1763.  
  1764.  
  1765.  
  1766.  
  1767.  
  1768.  
  1769.  
  1770.  
  1771.   {$EXTERNALSYM TB_SAVERESTORE}
  1772.   TB_SAVERESTORE          = TB_SAVERESTOREA;
  1773.   {$EXTERNALSYM TB_ADDSTRING}
  1774.   TB_ADDSTRING            = TB_ADDSTRINGA;
  1775.   {$EXTERNALSYM TB_GETBUTTONTEXT}
  1776.   TB_GETBUTTONTEXT        = TB_GETBUTTONTEXTA;
  1777.   {$EXTERNALSYM TBN_GETBUTTONINFO}
  1778.   TBN_GETBUTTONINFO       = TBN_GETBUTTONINFOA;
  1779.  
  1780.  
  1781.   {$EXTERNALSYM TB_CUSTOMIZE}
  1782.   TB_CUSTOMIZE            = WM_USER + 27;
  1783.   {$EXTERNALSYM TB_GETITEMRECT}
  1784.   TB_GETITEMRECT          = WM_USER + 29;
  1785.   {$EXTERNALSYM TB_BUTTONSTRUCTSIZE}
  1786.   TB_BUTTONSTRUCTSIZE     = WM_USER + 30;
  1787.   {$EXTERNALSYM TB_SETBUTTONSIZE}
  1788.   TB_SETBUTTONSIZE        = WM_USER + 31;
  1789.   {$EXTERNALSYM TB_SETBITMAPSIZE}
  1790.   TB_SETBITMAPSIZE        = WM_USER + 32;
  1791.   {$EXTERNALSYM TB_AUTOSIZE}
  1792.   TB_AUTOSIZE             = WM_USER + 33;
  1793.   {$EXTERNALSYM TB_GETTOOLTIPS}
  1794.   TB_GETTOOLTIPS          = WM_USER + 35;
  1795.   {$EXTERNALSYM TB_SETTOOLTIPS}
  1796.   TB_SETTOOLTIPS          = WM_USER + 36;
  1797.   {$EXTERNALSYM TB_SETPARENT}
  1798.   TB_SETPARENT            = WM_USER + 37;
  1799.   {$EXTERNALSYM TB_SETROWS}
  1800.   TB_SETROWS              = WM_USER + 39;
  1801.   {$EXTERNALSYM TB_GETROWS}
  1802.   TB_GETROWS              = WM_USER + 40;
  1803.   {$EXTERNALSYM TB_SETCMDID}
  1804.   TB_SETCMDID             = WM_USER + 42;
  1805.   {$EXTERNALSYM TB_CHANGEBITMAP}
  1806.   TB_CHANGEBITMAP         = WM_USER + 43;
  1807.   {$EXTERNALSYM TB_GETBITMAP}
  1808.   TB_GETBITMAP            = WM_USER + 44;
  1809.   {$EXTERNALSYM TB_REPLACEBITMAP}
  1810.   TB_REPLACEBITMAP        = WM_USER + 46;
  1811.   {$EXTERNALSYM TB_SETINDENT}
  1812.   TB_SETINDENT            = WM_USER + 47;
  1813.   {$EXTERNALSYM TB_SETIMAGELIST}
  1814.   TB_SETIMAGELIST         = WM_USER + 48;
  1815.   {$EXTERNALSYM TB_GETIMAGELIST}
  1816.   TB_GETIMAGELIST         = WM_USER + 49;
  1817.   {$EXTERNALSYM TB_LOADIMAGES}
  1818.   TB_LOADIMAGES           = WM_USER + 50;
  1819.   {$EXTERNALSYM TB_GETRECT}
  1820.   TB_GETRECT              = WM_USER + 51; { wParam is the Cmd instead of index }
  1821.   {$EXTERNALSYM TB_SETHOTIMAGELIST}
  1822.   TB_SETHOTIMAGELIST      = WM_USER + 52;
  1823.   {$EXTERNALSYM TB_GETHOTIMAGELIST}
  1824.   TB_GETHOTIMAGELIST      = WM_USER + 53;
  1825.   {$EXTERNALSYM TB_SETDISABLEDIMAGELIST}
  1826.   TB_SETDISABLEDIMAGELIST = WM_USER + 54;
  1827.   {$EXTERNALSYM TB_GETDISABLEDIMAGELIST}
  1828.   TB_GETDISABLEDIMAGELIST = WM_USER + 55;
  1829.   {$EXTERNALSYM TB_SETSTYLE}
  1830.   TB_SETSTYLE             = WM_USER + 56;
  1831.   {$EXTERNALSYM TB_GETSTYLE}
  1832.   TB_GETSTYLE             = WM_USER + 57;
  1833.   {$EXTERNALSYM TB_GETBUTTONSIZE}
  1834.   TB_GETBUTTONSIZE        = WM_USER + 58;
  1835.   {$EXTERNALSYM TB_SETBUTTONWIDTH}
  1836.   TB_SETBUTTONWIDTH       = WM_USER + 59;
  1837.   {$EXTERNALSYM TB_SETMAXTEXTROWS}
  1838.   TB_SETMAXTEXTROWS       = WM_USER + 60;
  1839.   {$EXTERNALSYM TB_GETTEXTROWS}
  1840.   TB_GETTEXTROWS          = WM_USER + 61;
  1841.  
  1842.   {$EXTERNALSYM TB_GETOBJECT}
  1843.   TB_GETOBJECT            = WM_USER + 62;  // wParam == IID, lParam void **ppv
  1844.   {$EXTERNALSYM TB_GETHOTITEM}
  1845.   TB_GETHOTITEM           = WM_USER + 71;
  1846.   {$EXTERNALSYM TB_SETHOTITEM}
  1847.   TB_SETHOTITEM           = WM_USER + 72;  // wParam == iHotItem
  1848.   {$EXTERNALSYM TB_SETANCHORHIGHLIGHT}
  1849.   TB_SETANCHORHIGHLIGHT   = WM_USER + 73;  // wParam == TRUE/FALSE
  1850.   {$EXTERNALSYM TB_GETANCHORHIGHLIGHT}
  1851.   TB_GETANCHORHIGHLIGHT   = WM_USER + 74;
  1852.   {$EXTERNALSYM TB_MAPACCELERATORA}
  1853.   TB_MAPACCELERATORA      = WM_USER + 78;  // wParam == ch, lParam int * pidBtn
  1854.  
  1855. type
  1856.   {$EXTERNALSYM TBINSERTMARK}
  1857.   TBINSERTMARK = packed record
  1858.     iButton: Integer;
  1859.     dwFlags: DWORD;
  1860.   end;
  1861.   PTBInsertMark = ^TTBInsertMark;
  1862.   TTBInsertMark = TBINSERTMARK;
  1863.  
  1864. const
  1865.   {$EXTERNALSYM TBIMHT_AFTER}
  1866.   TBIMHT_AFTER      = $00000001; // TRUE = insert After iButton, otherwise before
  1867.   {$EXTERNALSYM TBIMHT_BACKGROUND}
  1868.   TBIMHT_BACKGROUND = $00000002; // TRUE iff missed buttons completely
  1869.  
  1870.   {$EXTERNALSYM TB_GETINSERTMARK}
  1871.   TB_GETINSERTMARK        = WM_USER + 79;  // lParam == LPTBINSERTMARK
  1872.   {$EXTERNALSYM TB_SETINSERTMARK}
  1873.   TB_SETINSERTMARK        = WM_USER + 80;  // lParam == LPTBINSERTMARK
  1874.   {$EXTERNALSYM TB_INSERTMARKHITTEST}
  1875.   TB_INSERTMARKHITTEST    = WM_USER + 81;  // wParam == LPPOINT lParam == LPTBINSERTMARK
  1876.   {$EXTERNALSYM TB_MOVEBUTTON}
  1877.   TB_MOVEBUTTON           = WM_USER + 82;
  1878.   {$EXTERNALSYM TB_GETMAXSIZE}
  1879.   TB_GETMAXSIZE           = WM_USER + 83;  // lParam == LPSIZE
  1880.   {$EXTERNALSYM TB_SETEXTENDEDSTYLE}
  1881.   TB_SETEXTENDEDSTYLE     = WM_USER + 84;  // For TBSTYLE_EX_*
  1882.   {$EXTERNALSYM TB_GETEXTENDEDSTYLE}
  1883.   TB_GETEXTENDEDSTYLE     = WM_USER + 85;  // For TBSTYLE_EX_*
  1884.   {$EXTERNALSYM TB_GETPADDING}
  1885.   TB_GETPADDING           = WM_USER + 86;
  1886.   {$EXTERNALSYM TB_SETPADDING}
  1887.   TB_SETPADDING           = WM_USER + 87;
  1888.   {$EXTERNALSYM TB_SETINSERTMARKCOLOR}
  1889.   TB_SETINSERTMARKCOLOR   = WM_USER + 88;
  1890.   {$EXTERNALSYM TB_GETINSERTMARKCOLOR}
  1891.   TB_GETINSERTMARKCOLOR   = WM_USER + 89;
  1892.  
  1893.   {$EXTERNALSYM TB_SETCOLORSCHEME}
  1894.   TB_SETCOLORSCHEME       = CCM_SETCOLORSCHEME;  // lParam is color scheme
  1895.   {$EXTERNALSYM TB_GETCOLORSCHEME}
  1896.   TB_GETCOLORSCHEME       = CCM_GETCOLORSCHEME;    // fills in COLORSCHEME pointed to by lParam
  1897.  
  1898.   {$EXTERNALSYM TB_SETUNICODEFORMAT}
  1899.   TB_SETUNICODEFORMAT     = CCM_SETUNICODEFORMAT;
  1900.   {$EXTERNALSYM TB_GETUNICODEFORMAT}
  1901.   TB_GETUNICODEFORMAT     = CCM_GETUNICODEFORMAT;
  1902.  
  1903.   {$EXTERNALSYM TB_MAPACCELERATORW}
  1904.   TB_MAPACCELERATORW      = WM_USER + 90;  // wParam == ch, lParam int * pidBtn
  1905.  
  1906.  
  1907.  
  1908.  
  1909.   {$EXTERNALSYM TB_MAPACCELERATOR}
  1910.   TB_MAPACCELERATOR       = TB_MAPACCELERATORA;
  1911.  
  1912.  
  1913. type
  1914.   {$EXTERNALSYM TBREPLACEBITMAP}
  1915.   TBREPLACEBITMAP = packed record
  1916.     hInstOld: THandle;
  1917.     nIDOld: Cardinal;
  1918.     hInstNew: THandle;
  1919.     nIDNew: Cardinal;
  1920.     nButtons: Integer;
  1921.   end;
  1922.   PTBReplaceBitmap = ^TTBReplaceBitmap;
  1923.   TTBReplaceBitmap = TBREPLACEBITMAP;
  1924.  
  1925. const
  1926.   {$EXTERNALSYM TBBF_LARGE}
  1927.   TBBF_LARGE              = $0001;
  1928.  
  1929.   {$EXTERNALSYM TB_GETBITMAPFLAGS}
  1930.   TB_GETBITMAPFLAGS       = WM_USER + 41;
  1931.  
  1932.   {$EXTERNALSYM TBIF_IMAGE}
  1933.   TBIF_IMAGE              = $00000001;
  1934.   {$EXTERNALSYM TBIF_TEXT}
  1935.   TBIF_TEXT               = $00000002;
  1936.   {$EXTERNALSYM TBIF_STATE}
  1937.   TBIF_STATE              = $00000004;
  1938.   {$EXTERNALSYM TBIF_STYLE}
  1939.   TBIF_STYLE              = $00000008;
  1940.   {$EXTERNALSYM TBIF_LPARAM}
  1941.   TBIF_LPARAM             = $00000010;
  1942.   {$EXTERNALSYM TBIF_COMMAND}
  1943.   TBIF_COMMAND            = $00000020;
  1944.   {$EXTERNALSYM TBIF_SIZE}
  1945.   TBIF_SIZE               = $00000040;
  1946.  
  1947. type
  1948.   {$EXTERNALSYM TBBUTTONINFOA}
  1949.   TBBUTTONINFOA = packed record
  1950.     cbSize: UINT;
  1951.     dwMask: DWORD;
  1952.     idCommand: Integer;
  1953.     iImage: Integer;
  1954.     fsState: Byte;
  1955.     fsStyle: Byte;
  1956.     cx: Word;
  1957.     lParam: DWORD;
  1958.     pszText: PAnsiChar;
  1959.     cchText: Integer;
  1960.   end;
  1961.   {$EXTERNALSYM TBBUTTONINFOW}
  1962.   TBBUTTONINFOW = packed record
  1963.     cbSize: UINT;
  1964.     dwMask: DWORD;
  1965.     idCommand: Integer;
  1966.     iImage: Integer;
  1967.     fsState: Byte;
  1968.     fsStyle: Byte;
  1969.     cx: Word;
  1970.     lParam: DWORD;
  1971.     pszText: PWideChar;
  1972.     cchText: Integer;
  1973.   end;
  1974.   {$EXTERNALSYM TBBUTTONINFO}
  1975.   TBBUTTONINFO = TBBUTTONINFOA;
  1976.   PTBButtonInfoA = ^TTBButtonInfoA;
  1977.   PTBButtonInfoW = ^TTBButtonInfoW;
  1978.   PTBButtonInfo = PTBButtonInfoA;
  1979.   TTBButtonInfoA = TBBUTTONINFOA;
  1980.   TTBButtonInfoW = TBBUTTONINFOW;
  1981.   TTBButtonInfo = TTBButtonInfoA;
  1982.  
  1983. const
  1984.   // BUTTONINFO APIs do NOT support the string pool.
  1985.   {$EXTERNALSYM TB_GETBUTTONINFOW}
  1986.   TB_GETBUTTONINFOW        = WM_USER + 63;
  1987.   {$EXTERNALSYM TB_SETBUTTONINFOW}
  1988.   TB_SETBUTTONINFOW        = WM_USER + 64;
  1989.   {$EXTERNALSYM TB_GETBUTTONINFOA}
  1990.   TB_GETBUTTONINFOA        = WM_USER + 65;
  1991.   {$EXTERNALSYM TB_SETBUTTONINFOA}
  1992.   TB_SETBUTTONINFOA        = WM_USER + 66;
  1993.  
  1994.  
  1995.  
  1996.  
  1997.  
  1998.  
  1999.   {$EXTERNALSYM TB_GETBUTTONINFO}
  2000.   TB_GETBUTTONINFO         = TB_GETBUTTONINFOA;
  2001.   {$EXTERNALSYM TB_SETBUTTONINFO}
  2002.   TB_SETBUTTONINFO         = TB_SETBUTTONINFOA;
  2003.  
  2004.  
  2005.   {$EXTERNALSYM TB_INSERTBUTTONW}
  2006.   TB_INSERTBUTTONW        = WM_USER + 67;
  2007.   {$EXTERNALSYM TB_ADDBUTTONSW}
  2008.   TB_ADDBUTTONSW          = WM_USER + 68;
  2009.  
  2010.   {$EXTERNALSYM TB_HITTEST}
  2011.   TB_HITTEST              = WM_USER + 69;
  2012.  
  2013.   // New post Win95/NT4 for InsertButton and AddButton.  if iString member
  2014.   // is a pointer to a string, it will be handled as a string like listview
  2015.   // = although LPSTR_TEXTCALLBACK is not supported;.
  2016.  
  2017.  
  2018.  
  2019.  
  2020.  
  2021.  
  2022.   {$EXTERNALSYM TB_INSERTBUTTON}
  2023.   TB_INSERTBUTTON         = TB_INSERTBUTTONA;
  2024.   {$EXTERNALSYM TB_ADDBUTTONS}
  2025.   TB_ADDBUTTONS           = TB_ADDBUTTONSA;
  2026.  
  2027.  
  2028.   {$EXTERNALSYM TB_SETDRAWTEXTFLAGS}
  2029.   TB_SETDRAWTEXTFLAGS     = WM_USER + 70;  // wParam == mask lParam == bit values
  2030.  
  2031.   {$EXTERNALSYM TB_GETSTRING}
  2032.   TB_GETSTRING            = WM_USER + 92;
  2033.  
  2034.   {$EXTERNALSYM TBN_BEGINDRAG}
  2035.   TBN_BEGINDRAG           = TBN_FIRST-1;
  2036.   {$EXTERNALSYM TBN_ENDDRAG}
  2037.   TBN_ENDDRAG             = TBN_FIRST-2;
  2038.   {$EXTERNALSYM TBN_BEGINADJUST}
  2039.   TBN_BEGINADJUST         = TBN_FIRST-3;
  2040.   {$EXTERNALSYM TBN_ENDADJUST}
  2041.   TBN_ENDADJUST           = TBN_FIRST-4;
  2042.   {$EXTERNALSYM TBN_RESET}
  2043.   TBN_RESET               = TBN_FIRST-5;
  2044.   {$EXTERNALSYM TBN_QUERYINSERT}
  2045.   TBN_QUERYINSERT         = TBN_FIRST-6;
  2046.   {$EXTERNALSYM TBN_QUERYDELETE}
  2047.   TBN_QUERYDELETE         = TBN_FIRST-7;
  2048.   {$EXTERNALSYM TBN_TOOLBARCHANGE}
  2049.   TBN_TOOLBARCHANGE       = TBN_FIRST-8;
  2050.   {$EXTERNALSYM TBN_CUSTHELP}
  2051.   TBN_CUSTHELP            = TBN_FIRST-9;
  2052.   {$EXTERNALSYM TBN_DROPDOWN}
  2053.   TBN_DROPDOWN            = TBN_FIRST-10;
  2054.   {$EXTERNALSYM TBN_CLOSEUP}
  2055.   TBN_CLOSEUP             = TBN_FIRST-11;
  2056.   {$EXTERNALSYM TBN_GETOBJECT}
  2057.   TBN_GETOBJECT           = TBN_FIRST-12;
  2058.   {$EXTERNALSYM TBN_RESTORE}
  2059.   TBN_RESTORE             = TBN_FIRST-21;
  2060.   {$EXTERNALSYM TBN_SAVE}
  2061.   TBN_SAVE                = TBN_FIRST-22;
  2062.  
  2063.  
  2064. type
  2065.   // Structure for TBN_HOTITEMCHANGE notification
  2066.   {$EXTERNALSYM tagNMTBHOTITEM}
  2067.   tagNMTBHOTITEM = packed record
  2068.     hdr: TNMHdr;
  2069.     idOld: Integer;
  2070.     idNew: Integer;
  2071.     dwFlags: DWORD;           // HICF_*
  2072.   end;
  2073.   PNMTBHotItem = ^TNMTBHotItem;
  2074.   TNMTBHotItem = tagNMTBHOTITEM;
  2075.  
  2076. const
  2077.   // Hot item change flags
  2078.   {$EXTERNALSYM HICF_OTHER}
  2079.   HICF_OTHER          = $00000000;
  2080.   {$EXTERNALSYM HICF_MOUSE}
  2081.   HICF_MOUSE          = $00000001;          // Triggered by mouse
  2082.   {$EXTERNALSYM HICF_ARROWKEYS}
  2083.   HICF_ARROWKEYS      = $00000002;          // Triggered by arrow keys
  2084.   {$EXTERNALSYM HICF_ACCELERATOR}
  2085.   HICF_ACCELERATOR    = $00000004;          // Triggered by accelerator
  2086.   {$EXTERNALSYM HICF_DUPACCEL}
  2087.   HICF_DUPACCEL       = $00000008;          // This accelerator is not unique
  2088.   {$EXTERNALSYM HICF_ENTERING}
  2089.   HICF_ENTERING       = $00000010;          // idOld is invalid
  2090.   {$EXTERNALSYM HICF_LEAVING}
  2091.   HICF_LEAVING        = $00000020;          // idNew is invalid
  2092.   {$EXTERNALSYM HICF_RESELECT}
  2093.   HICF_RESELECT       = $00000040;          // hot item reselected
  2094.  
  2095.   {$EXTERNALSYM TBN_HOTITEMCHANGE}
  2096.   TBN_HOTITEMCHANGE       = TBN_FIRST - 13;
  2097.   {$EXTERNALSYM TBN_DRAGOUT}
  2098.   TBN_DRAGOUT             = TBN_FIRST - 14; // this is sent when the user clicks down on a button then drags off the button
  2099.   {$EXTERNALSYM TBN_DELETINGBUTTON}
  2100.   TBN_DELETINGBUTTON      = TBN_FIRST - 15; // uses TBNOTIFY
  2101.   {$EXTERNALSYM TBN_GETDISPINFOA}
  2102.   TBN_GETDISPINFOA        = TBN_FIRST - 16; // This is sent when the  toolbar needs  some display information
  2103.   {$EXTERNALSYM TBN_GETDISPINFOW}
  2104.   TBN_GETDISPINFOW        = TBN_FIRST - 17; // This is sent when the  toolbar needs  some display information
  2105.   {$EXTERNALSYM TBN_GETINFOTIPA}
  2106.   TBN_GETINFOTIPA         = TBN_FIRST - 18;
  2107.   {$EXTERNALSYM TBN_GETINFOTIPW}
  2108.   TBN_GETINFOTIPW         = TBN_FIRST - 19;
  2109.  
  2110. type
  2111.   {$EXTERNALSYM tagNMTBGETINFOTIPA}
  2112.   tagNMTBGETINFOTIPA = packed record
  2113.     hdr: TNMHdr;
  2114.     pszText: PAnsiChar;
  2115.     cchTextMax: Integer;
  2116.     iItem: Integer;
  2117.     lParam: LPARAM;
  2118.   end;
  2119.   {$EXTERNALSYM tagNMTBGETINFOTIPW}
  2120.   tagNMTBGETINFOTIPW = packed record
  2121.     hdr: TNMHdr;
  2122.     pszText: PWideChar;
  2123.     cchTextMax: Integer;
  2124.     iItem: Integer;
  2125.     lParam: LPARAM;
  2126.   end;
  2127.   {$EXTERNALSYM tagNMTBGETINFOTIP}
  2128.   tagNMTBGETINFOTIP = tagNMTBGETINFOTIPA;
  2129.   PNMTBGetInfoTipA = ^TNMTBGetInfoTipA;
  2130.   PNMTBGetInfoTipW = ^TNMTBGetInfoTipW;
  2131.   PNMTBGetInfoTip = PNMTBGetInfoTipA;
  2132.   TNMTBGetInfoTipA = tagNMTBGETINFOTIPA;
  2133.   TNMTBGetInfoTipW = tagNMTBGETINFOTIPW;
  2134.   TNMTBGetInfoTip = TNMTBGetInfoTipA;
  2135.  
  2136. const
  2137.   {$EXTERNALSYM TBNF_IMAGE}
  2138.   TBNF_IMAGE              = $00000001;
  2139.   {$EXTERNALSYM TBNF_TEXT}
  2140.   TBNF_TEXT               = $00000002;
  2141.   {$EXTERNALSYM TBNF_DI_SETITEM}
  2142.   TBNF_DI_SETITEM         = $10000000;
  2143.  
  2144. type
  2145.   {$EXTERNALSYM NMTBDISPINFOA}
  2146.   NMTBDISPINFOA = packed record
  2147.     hdr: TNMHdr;
  2148.     dwMask: DWORD;      // [in] Specifies the values requested .[out] Client ask the data to be set for future use
  2149.     idCommand: Integer; // [in] id of button we're requesting info for
  2150.     lParam: DWORD;      // [in] lParam of button
  2151.     iImage: Integer;    // [out] image index
  2152.     pszText: PAnsiChar;    // [out] new text for item
  2153.     cchText: Integer;   // [in] size of buffer pointed to by pszText
  2154.   end;
  2155.   {$EXTERNALSYM NMTBDISPINFOW}
  2156.   NMTBDISPINFOW = packed record
  2157.     hdr: TNMHdr;
  2158.     dwMask: DWORD;      // [in] Specifies the values requested .[out] Client ask the data to be set for future use
  2159.     idCommand: Integer; // [in] id of button we're requesting info for
  2160.     lParam: DWORD;      // [in] lParam of button
  2161.     iImage: Integer;    // [out] image index
  2162.     pszText: PWideChar;    // [out] new text for item
  2163.     cchText: Integer;   // [in] size of buffer pointed to by pszText
  2164.   end;
  2165.   {$EXTERNALSYM NMTBDISPINFO}
  2166.   NMTBDISPINFO = NMTBDISPINFOA;
  2167.   PNMTBDispInfoA = ^TNMTBDispInfoA;
  2168.   PNMTBDispInfoW = ^TNMTBDispInfoW;
  2169.   PNMTBDispInfo = PNMTBDispInfoA;
  2170.   TNMTBDispInfoA = NMTBDISPINFOA;
  2171.   TNMTBDispInfoW = NMTBDISPINFOW;
  2172.   TNMTBDispInfo = TNMTBDispInfoA;
  2173.  
  2174. const
  2175.   // Return codes for TBN_DROPDOWN
  2176.   {$EXTERNALSYM TBDDRET_DEFAULT}
  2177.   TBDDRET_DEFAULT         = 0;
  2178.   {$EXTERNALSYM TBDDRET_NODEFAULT}
  2179.   TBDDRET_NODEFAULT       = 1;
  2180.   {$EXTERNALSYM TBDDRET_TREATPRESSED}
  2181.   TBDDRET_TREATPRESSED    = 2;       // Treat as a standard press button
  2182.  
  2183. type
  2184.   {$EXTERNALSYM tagNMTOOLBARA}
  2185.   tagNMTOOLBARA = packed record
  2186.     hdr: TNMHdr;
  2187.     iItem: Integer;
  2188.     tbButton: TTBButton;
  2189.     cchText: Integer;
  2190.     pszText: PAnsiChar;
  2191.   end;
  2192.   {$EXTERNALSYM tagNMTOOLBARW}
  2193.   tagNMTOOLBARW = packed record
  2194.     hdr: TNMHdr;
  2195.     iItem: Integer;
  2196.     tbButton: TTBButton;
  2197.     cchText: Integer;
  2198.     pszText: PWideChar;
  2199.   end;
  2200.   {$EXTERNALSYM tagNMTOOLBAR}
  2201.   tagNMTOOLBAR = tagNMTOOLBARA;
  2202.   PNMToolBarA = ^TNMToolBarA;
  2203.   PNMToolBarW = ^TNMToolBarW;
  2204.   PNMToolBar = PNMToolBarA;
  2205.   TNMToolBarA = tagNMTOOLBARA;
  2206.   TNMToolBarW = tagNMTOOLBARW;
  2207.   TNMToolBar = TNMToolBarA;
  2208.  
  2209. { ====== REBAR CONTROL =================== }
  2210.  
  2211. const
  2212.   {$EXTERNALSYM REBARCLASSNAME}
  2213.   REBARCLASSNAME = 'ReBarWindow32';
  2214.  
  2215. type
  2216.   {$EXTERNALSYM tagREBARINFO}
  2217.   tagREBARINFO = packed record
  2218.     cbSize: UINT;
  2219.     fMask: UINT;
  2220.     himl: HIMAGELIST;
  2221.   end;
  2222.   PReBarInfo = ^TReBarInfo;
  2223.   TReBarInfo = tagREBARINFO;
  2224.  
  2225. const
  2226.   {$EXTERNALSYM RBIM_IMAGELIST}
  2227.   RBIM_IMAGELIST    = $00000001;
  2228.  
  2229.   {$EXTERNALSYM RBS_TOOLTIPS}
  2230.   RBS_TOOLTIPS      = $00000100;
  2231.   {$EXTERNALSYM RBS_VARHEIGHT}
  2232.   RBS_VARHEIGHT     = $00000200;
  2233.   {$EXTERNALSYM RBS_BANDBORDERS}
  2234.   RBS_BANDBORDERS   = $00000400;
  2235.   {$EXTERNALSYM RBS_FIXEDORDER}
  2236.   RBS_FIXEDORDER    = $00000800;
  2237.  
  2238.   {$EXTERNALSYM RBS_REGISTERDROP}
  2239.   RBS_REGISTERDROP  = $00001000;
  2240.   {$EXTERNALSYM RBS_AUTOSIZE}
  2241.   RBS_AUTOSIZE      = $00002000;
  2242.   {$EXTERNALSYM RBS_VERTICALGRIPPER}
  2243.   RBS_VERTICALGRIPPER = $00004000;  // this always has the vertical gripper (default for horizontal mode)
  2244.   {$EXTERNALSYM RBS_DBLCLKTOGGLE}
  2245.   RBS_DBLCLKTOGGLE  = $00008000;
  2246.  
  2247.   {$EXTERNALSYM RBBS_BREAK}
  2248.   RBBS_BREAK        = $00000001;  // break to new line
  2249.   {$EXTERNALSYM RBBS_FIXEDSIZE}
  2250.   RBBS_FIXEDSIZE    = $00000002;  // band can't be sized
  2251.   {$EXTERNALSYM RBBS_CHILDEDGE}
  2252.   RBBS_CHILDEDGE    = $00000004;  // edge around top and bottom of child window
  2253.   {$EXTERNALSYM RBBS_HIDDEN}
  2254.   RBBS_HIDDEN       = $00000008;  // don't show
  2255.   {$EXTERNALSYM RBBS_NOVERT}
  2256.   RBBS_NOVERT       = $00000010;  // don't show when vertical
  2257.   {$EXTERNALSYM RBBS_FIXEDBMP}
  2258.   RBBS_FIXEDBMP     = $00000020;  // bitmap doesn't move during band resize
  2259.   {$EXTERNALSYM RBBS_VARIABLEHEIGHT}
  2260.   RBBS_VARIABLEHEIGHT = $00000040;  // allow autosizing of this child vertically
  2261.   {$EXTERNALSYM RBBS_GRIPPERALWAYS}
  2262.   RBBS_GRIPPERALWAYS  = $00000080;  // always show the gripper
  2263.   {$EXTERNALSYM RBBS_NOGRIPPER}
  2264.   RBBS_NOGRIPPER      = $00000100;  // never show the gripper
  2265.  
  2266.   {$EXTERNALSYM RBBIM_STYLE}
  2267.   RBBIM_STYLE       = $00000001;
  2268.   {$EXTERNALSYM RBBIM_COLORS}
  2269.   RBBIM_COLORS      = $00000002;
  2270.   {$EXTERNALSYM RBBIM_TEXT}
  2271.   RBBIM_TEXT        = $00000004;
  2272.   {$EXTERNALSYM RBBIM_IMAGE}
  2273.   RBBIM_IMAGE       = $00000008;
  2274.   {$EXTERNALSYM RBBIM_CHILD}
  2275.   RBBIM_CHILD       = $00000010;
  2276.   {$EXTERNALSYM RBBIM_CHILDSIZE}
  2277.   RBBIM_CHILDSIZE   = $00000020;
  2278.   {$EXTERNALSYM RBBIM_SIZE}
  2279.   RBBIM_SIZE        = $00000040;
  2280.   {$EXTERNALSYM RBBIM_BACKGROUND}
  2281.   RBBIM_BACKGROUND  = $00000080;
  2282.   {$EXTERNALSYM RBBIM_ID}
  2283.   RBBIM_ID          = $00000100;
  2284.   {$EXTERNALSYM RBBIM_IDEALSIZE}
  2285.   RBBIM_IDEALSIZE     = $00000200;
  2286.   {$EXTERNALSYM RBBIM_LPARAM}
  2287.   RBBIM_LPARAM        = $00000400;
  2288.   {$EXTERNALSYM RBBIM_HEADERSIZE}
  2289.   RBBIM_HEADERSIZE    = $00000800;  // control the size of the header
  2290.  
  2291. type
  2292.   {$EXTERNALSYM tagREBARBANDINFOA}
  2293.   tagREBARBANDINFOA = packed record
  2294.     cbSize: UINT;
  2295.     fMask: UINT;
  2296.     fStyle: UINT;
  2297.     clrFore: TColorRef;
  2298.     clrBack: TColorRef;
  2299.     lpText: PAnsiChar;
  2300.     cch: UINT;
  2301.     iImage: Integer;
  2302.     hwndChild: HWnd;
  2303.     cxMinChild: UINT;
  2304.     cyMinChild: UINT;
  2305.     cx: UINT;
  2306.     hbmBack: HBitmap;
  2307.     wID: UINT;
  2308.     cyChild: UINT;
  2309.     cyMaxChild: UINT;
  2310.     cyIntegral: UINT;
  2311.     cxIdeal: UINT;
  2312.     lParam: LPARAM;
  2313.     cxHeader: UINT;
  2314.   end;
  2315.   {$EXTERNALSYM tagREBARBANDINFOW}
  2316.   tagREBARBANDINFOW = packed record
  2317.     cbSize: UINT;
  2318.     fMask: UINT;
  2319.     fStyle: UINT;
  2320.     clrFore: TColorRef;
  2321.     clrBack: TColorRef;
  2322.     lpText: PWideChar;
  2323.     cch: UINT;
  2324.     iImage: Integer;
  2325.     hwndChild: HWnd;
  2326.     cxMinChild: UINT;
  2327.     cyMinChild: UINT;
  2328.     cx: UINT;
  2329.     hbmBack: HBitmap;
  2330.     wID: UINT;
  2331.     cyChild: UINT;
  2332.     cyMaxChild: UINT;
  2333.     cyIntegral: UINT;
  2334.     cxIdeal: UINT;
  2335.     lParam: LPARAM;
  2336.     cxHeader: UINT;
  2337.   end;
  2338.   {$EXTERNALSYM tagREBARBANDINFO}
  2339.   tagREBARBANDINFO = tagREBARBANDINFOA;
  2340.   PReBarBandInfoA = ^TReBarBandInfoA;
  2341.   PReBarBandInfoW = ^TReBarBandInfoW;
  2342.   PReBarBandInfo = PReBarBandInfoA;
  2343.   TReBarBandInfoA = tagREBARBANDINFOA;
  2344.   TReBarBandInfoW = tagREBARBANDINFOW;
  2345.   TReBarBandInfo = TReBarBandInfoA;
  2346.  
  2347. const
  2348.   {$EXTERNALSYM RB_INSERTBANDA}
  2349.   RB_INSERTBANDA     = WM_USER +  1;
  2350.   {$EXTERNALSYM RB_DELETEBAND}
  2351.   RB_DELETEBAND      = WM_USER +  2;
  2352.   {$EXTERNALSYM RB_GETBARINFO}
  2353.   RB_GETBARINFO      = WM_USER +  3;
  2354.   {$EXTERNALSYM RB_SETBARINFO}
  2355.   RB_SETBARINFO      = WM_USER +  4;
  2356.   RB_GETBANDINFO_PRE_IE4     = WM_USER +  5;
  2357.   {$EXTERNALSYM RB_SETBANDINFOA}
  2358.   RB_SETBANDINFOA    = WM_USER +  6;
  2359.   {$EXTERNALSYM RB_SETPARENT}
  2360.   RB_SETPARENT       = WM_USER +  7;
  2361.   {$EXTERNALSYM RB_HITTEST}
  2362.   RB_HITTEST         = WM_USER +  8;
  2363.   {$EXTERNALSYM RB_GETRECT}
  2364.   RB_GETRECT         = WM_USER +  9;
  2365.   {$EXTERNALSYM RB_INSERTBANDW}
  2366.   RB_INSERTBANDW     = WM_USER +  10;
  2367.   {$EXTERNALSYM RB_SETBANDINFOW}
  2368.   RB_SETBANDINFOW    = WM_USER +  11;
  2369.   {$EXTERNALSYM RB_GETBANDCOUNT}
  2370.   RB_GETBANDCOUNT    = WM_USER +  12;
  2371.   {$EXTERNALSYM RB_GETROWCOUNT}
  2372.   RB_GETROWCOUNT     = WM_USER +  13;
  2373.   {$EXTERNALSYM RB_GETROWHEIGHT}
  2374.   RB_GETROWHEIGHT    = WM_USER +  14;
  2375.   {$EXTERNALSYM RB_IDTOINDEX}
  2376.   RB_IDTOINDEX       = WM_USER +  16; // wParam == id
  2377.   {$EXTERNALSYM RB_GETTOOLTIPS}
  2378.   RB_GETTOOLTIPS     = WM_USER +  17;
  2379.   {$EXTERNALSYM RB_SETTOOLTIPS}
  2380.   RB_SETTOOLTIPS     = WM_USER +  18;
  2381.   {$EXTERNALSYM RB_SETBKCOLOR}
  2382.   RB_SETBKCOLOR      = WM_USER +  19; // sets the default BK color
  2383.   {$EXTERNALSYM RB_GETBKCOLOR}
  2384.   RB_GETBKCOLOR      = WM_USER +  20; // defaults to CLR_NONE
  2385.   {$EXTERNALSYM RB_SETTEXTCOLOR}
  2386.   RB_SETTEXTCOLOR    = WM_USER +  21;
  2387.   {$EXTERNALSYM RB_GETTEXTCOLOR}
  2388.   RB_GETTEXTCOLOR    = WM_USER +  22; // defaults to 0x00000000
  2389.   {$EXTERNALSYM RB_SIZETORECT}
  2390.   RB_SIZETORECT      = WM_USER +  23; // resize the rebar/break bands and such to this rect (lparam;
  2391.  
  2392.   // for manual drag control
  2393.   // lparam == cursor pos
  2394.         // -1 means do it yourself.
  2395.         // -2 means use what you had saved before
  2396.   {$EXTERNALSYM RB_BEGINDRAG}
  2397.   RB_BEGINDRAG    = WM_USER + 24;
  2398.   {$EXTERNALSYM RB_ENDDRAG}
  2399.   RB_ENDDRAG      = WM_USER + 25;
  2400.   {$EXTERNALSYM RB_DRAGMOVE}
  2401.   RB_DRAGMOVE     = WM_USER + 26;
  2402.   {$EXTERNALSYM RB_GETBARHEIGHT}
  2403.   RB_GETBARHEIGHT = WM_USER + 27;
  2404.   {$EXTERNALSYM RB_GETBANDINFOW}
  2405.   RB_GETBANDINFOW = WM_USER + 28;
  2406.   {$EXTERNALSYM RB_GETBANDINFOA}
  2407.   RB_GETBANDINFOA = WM_USER + 29;
  2408.  
  2409.   {$EXTERNALSYM RB_MINIMIZEBAND}
  2410.   RB_MINIMIZEBAND = WM_USER + 30;
  2411.   {$EXTERNALSYM RB_MAXIMIZEBAND}
  2412.   RB_MAXIMIZEBAND = WM_USER + 31;
  2413.  
  2414.   {$EXTERNALSYM RB_GETDROPTARGET}
  2415.   RB_GETDROPTARGET = CCM_GETDROPTARGET;
  2416.  
  2417.   {$EXTERNALSYM RB_GETBANDBORDERS}
  2418.   RB_GETBANDBORDERS = WM_USER + 34;  // returns in lparam = lprc the amount of edges added to band wparam
  2419.  
  2420.   {$EXTERNALSYM RB_SHOWBAND}
  2421.   RB_SHOWBAND     = WM_USER + 35;      // show/hide band
  2422.   {$EXTERNALSYM RB_SETPALETTE}
  2423.   RB_SETPALETTE   = WM_USER + 37;
  2424.   {$EXTERNALSYM RB_GETPALETTE}
  2425.   RB_GETPALETTE   = WM_USER + 38;
  2426.   {$EXTERNALSYM RB_MOVEBAND}
  2427.   RB_MOVEBAND     = WM_USER + 39;
  2428.  
  2429.   {$EXTERNALSYM RB_SETUNICODEFORMAT}
  2430.   RB_SETUNICODEFORMAT     = CCM_SETUNICODEFORMAT;
  2431.   {$EXTERNALSYM RB_GETUNICODEFORMAT}
  2432.   RB_GETUNICODEFORMAT     = CCM_GETUNICODEFORMAT;
  2433.  
  2434.  
  2435.  
  2436.  
  2437.  
  2438.  
  2439.  
  2440.  
  2441.  
  2442.   {$EXTERNALSYM RB_INSERTBAND}
  2443.   RB_INSERTBAND      = RB_INSERTBANDA;
  2444.   {$EXTERNALSYM RB_SETBANDINFO}
  2445.   RB_SETBANDINFO     = RB_SETBANDINFOA;
  2446.   {$EXTERNALSYM RB_GETBANDINFO}
  2447.   RB_GETBANDINFO     = RB_GETBANDINFOA;
  2448.  
  2449.  
  2450.   {$EXTERNALSYM RBN_HEIGHTCHANGE}
  2451.   RBN_HEIGHTCHANGE   = RBN_FIRST - 0;
  2452.  
  2453.   {$EXTERNALSYM RBN_GETOBJECT}
  2454.   RBN_GETOBJECT       = RBN_FIRST - 1;
  2455.   {$EXTERNALSYM RBN_LAYOUTCHANGED}
  2456.   RBN_LAYOUTCHANGED   = RBN_FIRST - 2;
  2457.   {$EXTERNALSYM RBN_AUTOSIZE}
  2458.   RBN_AUTOSIZE        = RBN_FIRST - 3;
  2459.   {$EXTERNALSYM RBN_BEGINDRAG}
  2460.   RBN_BEGINDRAG       = RBN_FIRST - 4;
  2461.   {$EXTERNALSYM RBN_ENDDRAG}
  2462.   RBN_ENDDRAG         = RBN_FIRST - 5;
  2463.   {$EXTERNALSYM RBN_DELETINGBAND}
  2464.   RBN_DELETINGBAND    = RBN_FIRST - 6;     // Uses NMREBAR
  2465.   {$EXTERNALSYM RBN_DELETEDBAND}
  2466.   RBN_DELETEDBAND     = RBN_FIRST - 7;     // Uses NMREBAR
  2467.   {$EXTERNALSYM RBN_CHILDSIZE}
  2468.   RBN_CHILDSIZE       = RBN_FIRST - 8;
  2469.  
  2470. type
  2471.   {$EXTERNALSYM tagNMREBARCHILDSIZE}
  2472.   tagNMREBARCHILDSIZE = packed record
  2473.     hdr: TNMHdr;
  2474.     uBand: UINT;
  2475.     wID: UINT;
  2476.     rcChild: TRect;
  2477.     rcBand: TRect;
  2478.   end;
  2479.   PNMReBarChildSize = ^TNMReBarChildSize;
  2480.   TNMReBarChildSize = tagNMREBARCHILDSIZE;
  2481.  
  2482.   {$EXTERNALSYM tagNMREBAR}
  2483.   tagNMREBAR = packed record
  2484.     hdr: TNMHdr;
  2485.     dwMask: DWORD;           // RBNM_*
  2486.     uBand: UINT;
  2487.     fStyle: UINT;
  2488.     wID: UINT;
  2489.     lParam: LPARAM;
  2490.   end;
  2491.   PNMReBar = ^TNMReBar;
  2492.   TNMReBar = tagNMREBAR;
  2493.  
  2494. const
  2495.   // Mask flags for NMREBAR
  2496.   {$EXTERNALSYM RBNM_ID}
  2497.   RBNM_ID         = $00000001;
  2498.   {$EXTERNALSYM RBNM_STYLE}
  2499.   RBNM_STYLE      = $00000002;
  2500.   {$EXTERNALSYM RBNM_LPARAM}
  2501.   RBNM_LPARAM     = $00000004;
  2502.  
  2503. type
  2504.   {$EXTERNALSYM tagNMRBAUTOSIZE}
  2505.   tagNMRBAUTOSIZE = packed record
  2506.     hdr: TNMHdr;
  2507.     fChanged: BOOL;
  2508.     rcTarget: TRect;
  2509.     rcActual: TRect;
  2510.   end;
  2511.   PNMRBAutoSize = ^TNMRBAutoSize;
  2512.   TNMRBAutoSize = tagNMRBAUTOSIZE;
  2513.  
  2514. const
  2515.   {$EXTERNALSYM RBHT_NOWHERE}
  2516.   RBHT_NOWHERE    = $0001;
  2517.   {$EXTERNALSYM RBHT_CAPTION}
  2518.   RBHT_CAPTION    = $0002;
  2519.   {$EXTERNALSYM RBHT_CLIENT}
  2520.   RBHT_CLIENT     = $0003;
  2521.   {$EXTERNALSYM RBHT_GRABBER}
  2522.   RBHT_GRABBER    = $0004;
  2523.  
  2524. type
  2525.   {$EXTERNALSYM _RB_HITTESTINFO}
  2526.   _RB_HITTESTINFO = packed record
  2527.     pt: TPoint;
  2528.     flags: UINT;
  2529.     iBand: Integer;
  2530.   end;
  2531.   PRBHitTestInfo = ^TRBHitTestInfo;
  2532.   TRBHitTestInfo = _RB_HITTESTINFO;
  2533.  
  2534. { ====== TOOLTIPS CONTROL ========================== }
  2535.  
  2536. const
  2537.   {$EXTERNALSYM TOOLTIPS_CLASS}
  2538.   TOOLTIPS_CLASS = 'tooltips_class32';
  2539.  
  2540. type
  2541.   PToolInfoA = ^TToolInfoA;
  2542.   PToolInfoW = ^TToolInfoW;
  2543.   PToolInfo = PToolInfoA;
  2544.   {$EXTERNALSYM tagTOOLINFOA}
  2545.   tagTOOLINFOA = packed record
  2546.     cbSize: UINT;
  2547.     uFlags: UINT;
  2548.     hwnd: HWND;
  2549.     uId: UINT;
  2550.     Rect: TRect;
  2551.     hInst: THandle;
  2552.     lpszText: PAnsiChar;
  2553.     lParam: LPARAM;
  2554.   end;
  2555.   {$EXTERNALSYM tagTOOLINFOW}
  2556.   tagTOOLINFOW = packed record
  2557.     cbSize: UINT;
  2558.     uFlags: UINT;
  2559.     hwnd: HWND;
  2560.     uId: UINT;
  2561.     Rect: TRect;
  2562.     hInst: THandle;
  2563.     lpszText: PWideChar;
  2564.     lParam: LPARAM;
  2565.   end;
  2566.   {$EXTERNALSYM tagTOOLINFO}
  2567.   tagTOOLINFO = tagTOOLINFOA;
  2568.   TToolInfoA = tagTOOLINFOA;
  2569.   TToolInfoW = tagTOOLINFOW;
  2570.   TToolInfo = TToolInfoA;
  2571.   {$EXTERNALSYM TOOLINFOA}
  2572.   TOOLINFOA = tagTOOLINFOA;
  2573.   {$EXTERNALSYM TOOLINFOW}
  2574.   TOOLINFOW = tagTOOLINFOW;
  2575.   {$EXTERNALSYM TOOLINFO}
  2576.   TOOLINFO = TOOLINFOA;
  2577.  
  2578. const
  2579.   {$EXTERNALSYM TTS_ALWAYSTIP}
  2580.   TTS_ALWAYSTIP           = $01;
  2581.   {$EXTERNALSYM TTS_NOPREFIX}
  2582.   TTS_NOPREFIX            = $02;
  2583.  
  2584.   {$EXTERNALSYM TTF_IDISHWND}
  2585.   TTF_IDISHWND            = $0001;
  2586.  
  2587.   // Use this to center around trackpoint in trackmode
  2588.   // -OR- to center around tool in normal mode.
  2589.   // Use TTF_ABSOLUTE to place the tip exactly at the track coords when
  2590.   // in tracking mode.  TTF_ABSOLUTE can be used in conjunction with TTF_CENTERTIP
  2591.   // to center the tip absolutely about the track point.
  2592.  
  2593.   {$EXTERNALSYM TTF_CENTERTIP}
  2594.   TTF_CENTERTIP           = $0002;
  2595.   {$EXTERNALSYM TTF_RTLREADING}
  2596.   TTF_RTLREADING          = $0004;
  2597.   {$EXTERNALSYM TTF_SUBCLASS}
  2598.   TTF_SUBCLASS            = $0010;
  2599.   {$EXTERNALSYM TTF_TRACK}
  2600.   TTF_TRACK               = $0020;
  2601.   {$EXTERNALSYM TTF_ABSOLUTE}
  2602.   TTF_ABSOLUTE            = $0080;
  2603.   {$EXTERNALSYM TTF_TRANSPARENT}
  2604.   TTF_TRANSPARENT         = $0100;
  2605.   {$EXTERNALSYM TTF_DI_SETITEM}
  2606.   TTF_DI_SETITEM          = $8000;       // valid only on the TTN_NEEDTEXT callback
  2607.  
  2608.   {$EXTERNALSYM TTDT_AUTOMATIC}
  2609.   TTDT_AUTOMATIC          = 0;
  2610.   {$EXTERNALSYM TTDT_RESHOW}
  2611.   TTDT_RESHOW             = 1;
  2612.   {$EXTERNALSYM TTDT_AUTOPOP}
  2613.   TTDT_AUTOPOP            = 2;
  2614.   {$EXTERNALSYM TTDT_INITIAL}
  2615.   TTDT_INITIAL            = 3;
  2616.  
  2617.   {$EXTERNALSYM TTM_ACTIVATE}
  2618.   TTM_ACTIVATE            = WM_USER + 1;
  2619.   {$EXTERNALSYM TTM_SETDELAYTIME}
  2620.   TTM_SETDELAYTIME        = WM_USER + 3;
  2621.  
  2622.   {$EXTERNALSYM TTM_ADDTOOLA}
  2623.   TTM_ADDTOOLA             = WM_USER + 4;
  2624.   {$EXTERNALSYM TTM_DELTOOLA}
  2625.   TTM_DELTOOLA             = WM_USER + 5;
  2626.   {$EXTERNALSYM TTM_NEWTOOLRECTA}
  2627.   TTM_NEWTOOLRECTA         = WM_USER + 6;
  2628.   {$EXTERNALSYM TTM_GETTOOLINFOA}
  2629.   TTM_GETTOOLINFOA         = WM_USER + 8;
  2630.   {$EXTERNALSYM TTM_SETTOOLINFOA}
  2631.   TTM_SETTOOLINFOA         = WM_USER + 9;
  2632.   {$EXTERNALSYM TTM_HITTESTA}
  2633.   TTM_HITTESTA             = WM_USER + 10;
  2634.   {$EXTERNALSYM TTM_GETTEXTA}
  2635.   TTM_GETTEXTA             = WM_USER + 11;
  2636.   {$EXTERNALSYM TTM_UPDATETIPTEXTA}
  2637.   TTM_UPDATETIPTEXTA       = WM_USER + 12;
  2638.   {$EXTERNALSYM TTM_ENUMTOOLSA}
  2639.   TTM_ENUMTOOLSA           = WM_USER + 14;
  2640.   {$EXTERNALSYM TTM_GETCURRENTTOOLA}
  2641.   TTM_GETCURRENTTOOLA      = WM_USER + 15;
  2642.  
  2643.   {$EXTERNALSYM TTM_ADDTOOLW}
  2644.   TTM_ADDTOOLW             = WM_USER + 50;
  2645.   {$EXTERNALSYM TTM_DELTOOLW}
  2646.   TTM_DELTOOLW             = WM_USER + 51;
  2647.   {$EXTERNALSYM TTM_NEWTOOLRECTW}
  2648.   TTM_NEWTOOLRECTW         = WM_USER + 52;
  2649.   {$EXTERNALSYM TTM_GETTOOLINFOW}
  2650.   TTM_GETTOOLINFOW         = WM_USER + 53;
  2651.   {$EXTERNALSYM TTM_SETTOOLINFOW}
  2652.   TTM_SETTOOLINFOW         = WM_USER + 54;
  2653.   {$EXTERNALSYM TTM_HITTESTW}
  2654.   TTM_HITTESTW             = WM_USER + 55;
  2655.   {$EXTERNALSYM TTM_GETTEXTW}
  2656.   TTM_GETTEXTW             = WM_USER + 56;
  2657.   {$EXTERNALSYM TTM_UPDATETIPTEXTW}
  2658.   TTM_UPDATETIPTEXTW       = WM_USER + 57;
  2659.   {$EXTERNALSYM TTM_ENUMTOOLSW}
  2660.   TTM_ENUMTOOLSW           = WM_USER + 58;
  2661.   {$EXTERNALSYM TTM_GETCURRENTTOOLW}
  2662.   TTM_GETCURRENTTOOLW      = WM_USER + 59;
  2663.   {$EXTERNALSYM TTM_WINDOWFROMPOINT}
  2664.   TTM_WINDOWFROMPOINT      = WM_USER + 16;
  2665.   {$EXTERNALSYM TTM_TRACKACTIVATE}
  2666.   TTM_TRACKACTIVATE        = WM_USER + 17;  // wParam = TRUE/FALSE start end  lparam = LPTOOLINFO
  2667.   {$EXTERNALSYM TTM_TRACKPOSITION}
  2668.   TTM_TRACKPOSITION        = WM_USER + 18;  // lParam = dwPos
  2669.   {$EXTERNALSYM TTM_SETTIPBKCOLOR}
  2670.   TTM_SETTIPBKCOLOR        = WM_USER + 19;
  2671.   {$EXTERNALSYM TTM_SETTIPTEXTCOLOR}
  2672.   TTM_SETTIPTEXTCOLOR      = WM_USER + 20;
  2673.   {$EXTERNALSYM TTM_GETDELAYTIME}
  2674.   TTM_GETDELAYTIME         = WM_USER + 21;
  2675.   {$EXTERNALSYM TTM_GETTIPBKCOLOR}
  2676.   TTM_GETTIPBKCOLOR        = WM_USER + 22;
  2677.   {$EXTERNALSYM TTM_GETTIPTEXTCOLOR}
  2678.   TTM_GETTIPTEXTCOLOR      = WM_USER + 23;
  2679.   {$EXTERNALSYM TTM_SETMAXTIPWIDTH}
  2680.   TTM_SETMAXTIPWIDTH       = WM_USER + 24;
  2681.   {$EXTERNALSYM TTM_GETMAXTIPWIDTH}
  2682.   TTM_GETMAXTIPWIDTH       = WM_USER + 25;
  2683.   {$EXTERNALSYM TTM_SETMARGIN}
  2684.   TTM_SETMARGIN            = WM_USER + 26;  // lParam = lprc
  2685.   {$EXTERNALSYM TTM_GETMARGIN}
  2686.   TTM_GETMARGIN            = WM_USER + 27;  // lParam = lprc
  2687.   {$EXTERNALSYM TTM_POP}
  2688.   TTM_POP                  = WM_USER + 28;
  2689.   {$EXTERNALSYM TTM_UPDATE}
  2690.   TTM_UPDATE               = WM_USER + 29;
  2691.  
  2692.  
  2693.  
  2694.  
  2695.  
  2696.  
  2697.  
  2698.  
  2699.  
  2700.  
  2701.  
  2702.  
  2703.  
  2704.  
  2705.  
  2706.  
  2707.  
  2708.  
  2709.  
  2710.  
  2711.  
  2712.  
  2713.  
  2714.   {$EXTERNALSYM TTM_ADDTOOL}
  2715.   TTM_ADDTOOL             = TTM_ADDTOOLA;
  2716.   {$EXTERNALSYM TTM_DELTOOL}
  2717.   TTM_DELTOOL             = TTM_DELTOOLA;
  2718.   {$EXTERNALSYM TTM_NEWTOOLRECT}
  2719.   TTM_NEWTOOLRECT         = TTM_NEWTOOLRECTA;
  2720.   {$EXTERNALSYM TTM_GETTOOLINFO}
  2721.   TTM_GETTOOLINFO         = TTM_GETTOOLINFOA;
  2722.   {$EXTERNALSYM TTM_SETTOOLINFO}
  2723.   TTM_SETTOOLINFO         = TTM_SETTOOLINFOA;
  2724.   {$EXTERNALSYM TTM_HITTEST}
  2725.   TTM_HITTEST             = TTM_HITTESTA;
  2726.   {$EXTERNALSYM TTM_GETTEXT}
  2727.   TTM_GETTEXT             = TTM_GETTEXTA;
  2728.   {$EXTERNALSYM TTM_UPDATETIPTEXT}
  2729.   TTM_UPDATETIPTEXT       = TTM_UPDATETIPTEXTA;
  2730.   {$EXTERNALSYM TTM_ENUMTOOLS}
  2731.   TTM_ENUMTOOLS           = TTM_ENUMTOOLSA;
  2732.   {$EXTERNALSYM TTM_GETCURRENTTOOL}
  2733.   TTM_GETCURRENTTOOL      = TTM_GETCURRENTTOOLA;
  2734.  
  2735.  
  2736.   {$EXTERNALSYM TTM_RELAYEVENT}
  2737.   TTM_RELAYEVENT          = WM_USER + 7;
  2738.   {$EXTERNALSYM TTM_GETTOOLCOUNT}
  2739.   TTM_GETTOOLCOUNT        = WM_USER +13;
  2740.  
  2741.  
  2742. type
  2743.   PTTHitTestInfoA = ^TTTHitTestInfoA;
  2744.   PTTHitTestInfoW = ^TTTHitTestInfoW;
  2745.   PTTHitTestInfo = PTTHitTestInfoA;
  2746.   {$EXTERNALSYM _TT_HITTESTINFOA}
  2747.   _TT_HITTESTINFOA = packed record
  2748.     hwnd: HWND;
  2749.     pt: TPoint;
  2750.     ti: TToolInfoA;
  2751.   end;
  2752.   {$EXTERNALSYM _TT_HITTESTINFOW}
  2753.   _TT_HITTESTINFOW = packed record
  2754.     hwnd: HWND;
  2755.     pt: TPoint;
  2756.     ti: TToolInfoW;
  2757.   end;
  2758.   {$EXTERNALSYM _TT_HITTESTINFO}
  2759.   _TT_HITTESTINFO = _TT_HITTESTINFOA;
  2760.   TTTHitTestInfoA = _TT_HITTESTINFOA;
  2761.   TTTHitTestInfoW = _TT_HITTESTINFOW;
  2762.   TTTHitTestInfo = TTTHitTestInfoA;
  2763.   {$EXTERNALSYM TTHITTESTINFOA}
  2764.   TTHITTESTINFOA = _TT_HITTESTINFOA;
  2765.   {$EXTERNALSYM TTHITTESTINFOW}
  2766.   TTHITTESTINFOW = _TT_HITTESTINFOW;
  2767.   {$EXTERNALSYM TTHITTESTINFO}
  2768.   TTHITTESTINFO = TTHITTESTINFOA;
  2769.  
  2770.  
  2771. const
  2772.   {$EXTERNALSYM TTN_NEEDTEXTA}
  2773.   TTN_NEEDTEXTA            = TTN_FIRST - 0;
  2774.   {$EXTERNALSYM TTN_NEEDTEXTW}
  2775.   TTN_NEEDTEXTW            = TTN_FIRST - 10;
  2776.  
  2777.  
  2778.  
  2779.  
  2780.  
  2781.   {$EXTERNALSYM TTN_NEEDTEXT}
  2782.   TTN_NEEDTEXT            = TTN_NEEDTEXTA;
  2783.  
  2784.  
  2785.   {$EXTERNALSYM TTN_SHOW}
  2786.   TTN_SHOW                = TTN_FIRST - 1;
  2787.   {$EXTERNALSYM TTN_POP}
  2788.   TTN_POP                 = TTN_FIRST - 2;
  2789.  
  2790. type
  2791.   tagNMTTDISPINFOA = packed record
  2792.     hdr: TNMHdr;
  2793.     lpszText: PAnsiChar;
  2794.     szText: array[0..79] of AnsiChar;
  2795.     hinst: HINST;
  2796.     uFlags: UINT;
  2797.     lParam: LPARAM;
  2798.   end;
  2799. //  {$EXTERNALSYM tagNMTTDISPINFOA}
  2800.   tagNMTTDISPINFOW = packed record
  2801.     hdr: TNMHdr;
  2802.     lpszText: PWideChar;
  2803.     szText: array[0..79] of WideChar;
  2804.     hinst: HINST;
  2805.     uFlags: UINT;
  2806.     lParam: LPARAM;
  2807.   end;
  2808. //  {$EXTERNALSYM tagNMTTDISPINFOW}
  2809.   tagNMTTDISPINFO = tagNMTTDISPINFOA;
  2810.   PNMTTDispInfoA = ^TNMTTDispInfoA;
  2811.   PNMTTDispInfoW = ^TNMTTDispInfoW;
  2812.   PNMTTDispInfo = PNMTTDispInfoA;
  2813.   TNMTTDispInfoA = tagNMTTDISPINFOA;
  2814.   TNMTTDispInfoW = tagNMTTDISPINFOW;
  2815.   TNMTTDispInfo = TNMTTDispInfoA;
  2816.  
  2817.   {$EXTERNALSYM tagTOOLTIPTEXTA}
  2818.   tagTOOLTIPTEXTA = tagNMTTDISPINFOA;
  2819.   {$EXTERNALSYM tagTOOLTIPTEXTW}
  2820.   tagTOOLTIPTEXTW = tagNMTTDISPINFOW;
  2821.   {$EXTERNALSYM tagTOOLTIPTEXT}
  2822.   tagTOOLTIPTEXT = tagTOOLTIPTEXTA;
  2823.   {$EXTERNALSYM TOOLTIPTEXTA}
  2824.   TOOLTIPTEXTA = tagNMTTDISPINFOA;
  2825.   {$EXTERNALSYM TOOLTIPTEXTW}
  2826.   TOOLTIPTEXTW = tagNMTTDISPINFOW;
  2827.   {$EXTERNALSYM TOOLTIPTEXT}
  2828.   TOOLTIPTEXT = TOOLTIPTEXTA;
  2829.   TToolTipTextA = tagNMTTDISPINFOA;
  2830.   TToolTipTextW = tagNMTTDISPINFOW;
  2831.   TToolTipText = TToolTipTextA;
  2832.   PToolTipTextA = ^TToolTipTextA;
  2833.   PToolTipTextW = ^TToolTipTextW;
  2834.   PToolTipText = PToolTipTextA;
  2835. { ====== STATUS BAR CONTROL ================= }
  2836.  
  2837. const
  2838.   {$EXTERNALSYM SBARS_SIZEGRIP}
  2839.   SBARS_SIZEGRIP          = $0100;
  2840.  
  2841. {$EXTERNALSYM DrawStatusText}
  2842. procedure DrawStatusText(hDC: HDC; lprc: PRect; pzsText: PChar;
  2843.   uFlags: UINT); stdcall;
  2844. {$EXTERNALSYM DrawStatusTextA}
  2845. procedure DrawStatusTextA(hDC: HDC; lprc: PRect; pzsText: PAnsiChar;
  2846.   uFlags: UINT); stdcall;
  2847. {$EXTERNALSYM DrawStatusTextW}
  2848. procedure DrawStatusTextW(hDC: HDC; lprc: PRect; pzsText: PWideChar;
  2849.   uFlags: UINT); stdcall;
  2850. {$EXTERNALSYM CreateStatusWindow}
  2851. function CreateStatusWindow(Style: Longint; lpszText: PChar;
  2852.   hwndParent: HWND; wID: UINT): HWND; stdcall;
  2853. {$EXTERNALSYM CreateStatusWindowA}
  2854. function CreateStatusWindowA(Style: Longint; lpszText: PAnsiChar;
  2855.   hwndParent: HWND; wID: UINT): HWND; stdcall;
  2856. {$EXTERNALSYM CreateStatusWindowW}
  2857. function CreateStatusWindowW(Style: Longint; lpszText: PWideChar;
  2858.   hwndParent: HWND; wID: UINT): HWND; stdcall;
  2859.  
  2860. const
  2861.   {$EXTERNALSYM STATUSCLASSNAME}
  2862.   STATUSCLASSNAME = 'msctls_statusbar32';
  2863.  
  2864. const
  2865.   {$EXTERNALSYM SB_SETTEXTA}
  2866.   SB_SETTEXTA             = WM_USER+1;
  2867.   {$EXTERNALSYM SB_GETTEXTA}
  2868.   SB_GETTEXTA             = WM_USER+2;
  2869.   {$EXTERNALSYM SB_GETTEXTLENGTHA}
  2870.   SB_GETTEXTLENGTHA       = WM_USER+3;
  2871.   {$EXTERNALSYM SB_SETTIPTEXTA}
  2872.   SB_SETTIPTEXTA          = WM_USER+16;
  2873.   {$EXTERNALSYM SB_GETTIPTEXTA}
  2874.   SB_GETTIPTEXTA          = WM_USER+18;
  2875.  
  2876.   {$EXTERNALSYM SB_SETTEXTW}
  2877.   SB_SETTEXTW             = WM_USER+11;
  2878.   {$EXTERNALSYM SB_GETTEXTW}
  2879.   SB_GETTEXTW             = WM_USER+13;
  2880.   {$EXTERNALSYM SB_GETTEXTLENGTHW}
  2881.   SB_GETTEXTLENGTHW       = WM_USER+12;
  2882.   {$EXTERNALSYM SB_SETTIPTEXTW}
  2883.   SB_SETTIPTEXTW          = WM_USER+17;
  2884.   {$EXTERNALSYM SB_GETTIPTEXTW}
  2885.   SB_GETTIPTEXTW          = WM_USER+19;
  2886.  
  2887.  
  2888.  
  2889.  
  2890.  
  2891.  
  2892.  
  2893.  
  2894.  
  2895.  
  2896.  
  2897.  
  2898.  
  2899.   {$EXTERNALSYM SB_SETTEXT}
  2900.   SB_SETTEXT             = SB_SETTEXTA;
  2901.   {$EXTERNALSYM SB_GETTEXT}
  2902.   SB_GETTEXT             = SB_GETTEXTA;
  2903.   {$EXTERNALSYM SB_GETTEXTLENGTH}
  2904.   SB_GETTEXTLENGTH       = SB_GETTEXTLENGTHA;
  2905.   {$EXTERNALSYM SB_SETTIPTEXT}
  2906.   SB_SETTIPTEXT          = SB_SETTIPTEXTA;
  2907.   {$EXTERNALSYM SB_GETTIPTEXT}
  2908.   SB_GETTIPTEXT          = SB_GETTIPTEXTA;
  2909.  
  2910.  
  2911.   {$EXTERNALSYM SB_SETPARTS}
  2912.   SB_SETPARTS             = WM_USER+4;
  2913.   {$EXTERNALSYM SB_GETPARTS}
  2914.   SB_GETPARTS             = WM_USER+6;
  2915.   {$EXTERNALSYM SB_GETBORDERS}
  2916.   SB_GETBORDERS           = WM_USER+7;
  2917.   {$EXTERNALSYM SB_SETMINHEIGHT}
  2918.   SB_SETMINHEIGHT         = WM_USER+8;
  2919.   {$EXTERNALSYM SB_SIMPLE}
  2920.   SB_SIMPLE               = WM_USER+9;
  2921.   {$EXTERNALSYM SB_GETRECT}
  2922.   SB_GETRECT              = WM_USER + 10;
  2923.   {$EXTERNALSYM SB_ISSIMPLE}
  2924.   SB_ISSIMPLE             = WM_USER+14;
  2925.   {$EXTERNALSYM SB_SETICON}
  2926.   SB_SETICON              = WM_USER+15;
  2927.   {$EXTERNALSYM SB_GETICON}
  2928.   SB_GETICON              = WM_USER+20;
  2929.   {$EXTERNALSYM SB_SETUNICODEFORMAT}
  2930.   SB_SETUNICODEFORMAT     = CCM_SETUNICODEFORMAT;
  2931.   {$EXTERNALSYM SB_GETUNICODEFORMAT}
  2932.   SB_GETUNICODEFORMAT     = CCM_GETUNICODEFORMAT;
  2933.  
  2934.   {$EXTERNALSYM SBT_OWNERDRAW}
  2935.   SBT_OWNERDRAW            = $1000;
  2936.   {$EXTERNALSYM SBT_NOBORDERS}
  2937.   SBT_NOBORDERS            = $0100;
  2938.   {$EXTERNALSYM SBT_POPOUT}
  2939.   SBT_POPOUT               = $0200;
  2940.   {$EXTERNALSYM SBT_RTLREADING}
  2941.   SBT_RTLREADING           = $0400;
  2942.   {$EXTERNALSYM SBT_TOOLTIPS}
  2943.   SBT_TOOLTIPS             = $0800;
  2944.  
  2945.   {$EXTERNALSYM SB_SETBKCOLOR}
  2946.   SB_SETBKCOLOR            = CCM_SETBKCOLOR;      // lParam = bkColor
  2947.  
  2948.   // status bar notifications
  2949.   {$EXTERNALSYM SBN_SIMPLEMODECHANGE}
  2950.   SBN_SIMPLEMODECHANGE     = SBN_FIRST - 0;
  2951.  
  2952. { ====== MENU HELP ========================== }
  2953.  
  2954. {$EXTERNALSYM MenuHelp}
  2955. procedure MenuHelp(Msg: UINT; wParam: WPARAM; lParam: LPARAM;
  2956.   hMainMenu: HMENU; hInst: THandle; hwndStatus: HWND; lpwIDs: PUINT); stdcall;
  2957. {$EXTERNALSYM ShowHideMenuCtl}
  2958. function ShowHideMenuCtl(hWnd: HWND; uFlags: UINT; lpInfo: PINT): Bool; stdcall;
  2959. {$EXTERNALSYM GetEffectiveClientRect}
  2960. procedure GetEffectiveClientRect(hWnd: HWND; lprc: PRect; lpInfo: PINT); stdcall;
  2961.  
  2962. const
  2963.   {$EXTERNALSYM MINSYSCOMMAND}
  2964.   MINSYSCOMMAND   = SC_SIZE;
  2965.  
  2966.  
  2967. { ====== TRACKBAR CONTROL =================== }
  2968.  
  2969.   {$EXTERNALSYM TRACKBAR_CLASS}
  2970.   TRACKBAR_CLASS = 'msctls_trackbar32';
  2971.  
  2972. const
  2973.   {$EXTERNALSYM TBS_AUTOTICKS}
  2974.   TBS_AUTOTICKS           = $0001;
  2975.   {$EXTERNALSYM TBS_VERT}
  2976.   TBS_VERT                = $0002;
  2977.   {$EXTERNALSYM TBS_HORZ}
  2978.   TBS_HORZ                = $0000;
  2979.   {$EXTERNALSYM TBS_TOP}
  2980.   TBS_TOP                 = $0004;
  2981.   {$EXTERNALSYM TBS_BOTTOM}
  2982.   TBS_BOTTOM              = $0000;
  2983.   {$EXTERNALSYM TBS_LEFT}
  2984.   TBS_LEFT                = $0004;
  2985.   {$EXTERNALSYM TBS_RIGHT}
  2986.   TBS_RIGHT               = $0000;
  2987.   {$EXTERNALSYM TBS_BOTH}
  2988.   TBS_BOTH                = $0008;
  2989.   {$EXTERNALSYM TBS_NOTICKS}
  2990.   TBS_NOTICKS             = $0010;
  2991.   {$EXTERNALSYM TBS_ENABLESELRANGE}
  2992.   TBS_ENABLESELRANGE      = $0020;
  2993.   {$EXTERNALSYM TBS_FIXEDLENGTH}
  2994.   TBS_FIXEDLENGTH         = $0040;
  2995.   {$EXTERNALSYM TBS_NOTHUMB}
  2996.   TBS_NOTHUMB             = $0080;
  2997.   {$EXTERNALSYM TBS_TOOLTIPS}
  2998.   TBS_TOOLTIPS            = $0100;
  2999.  
  3000.   {$EXTERNALSYM TBM_GETPOS}
  3001.   TBM_GETPOS              = WM_USER;
  3002.   {$EXTERNALSYM TBM_GETRANGEMIN}
  3003.   TBM_GETRANGEMIN         = WM_USER+1;
  3004.   {$EXTERNALSYM TBM_GETRANGEMAX}
  3005.   TBM_GETRANGEMAX         = WM_USER+2;
  3006.   {$EXTERNALSYM TBM_GETTIC}
  3007.   TBM_GETTIC              = WM_USER+3;
  3008.   {$EXTERNALSYM TBM_SETTIC}
  3009.   TBM_SETTIC              = WM_USER+4;
  3010.   {$EXTERNALSYM TBM_SETPOS}
  3011.   TBM_SETPOS              = WM_USER+5;
  3012.   {$EXTERNALSYM TBM_SETRANGE}
  3013.   TBM_SETRANGE            = WM_USER+6;
  3014.   {$EXTERNALSYM TBM_SETRANGEMIN}
  3015.   TBM_SETRANGEMIN         = WM_USER+7;
  3016.   {$EXTERNALSYM TBM_SETRANGEMAX}
  3017.   TBM_SETRANGEMAX         = WM_USER+8;
  3018.   {$EXTERNALSYM TBM_CLEARTICS}
  3019.   TBM_CLEARTICS           = WM_USER+9;
  3020.   {$EXTERNALSYM TBM_SETSEL}
  3021.   TBM_SETSEL              = WM_USER+10;
  3022.   {$EXTERNALSYM TBM_SETSELSTART}
  3023.   TBM_SETSELSTART         = WM_USER+11;
  3024.   {$EXTERNALSYM TBM_SETSELEND}
  3025.   TBM_SETSELEND           = WM_USER+12;
  3026.   {$EXTERNALSYM TBM_GETPTICS}
  3027.   TBM_GETPTICS            = WM_USER+14;
  3028.   {$EXTERNALSYM TBM_GETTICPOS}
  3029.   TBM_GETTICPOS           = WM_USER+15;
  3030.   {$EXTERNALSYM TBM_GETNUMTICS}
  3031.   TBM_GETNUMTICS          = WM_USER+16;
  3032.   {$EXTERNALSYM TBM_GETSELSTART}
  3033.   TBM_GETSELSTART         = WM_USER+17;
  3034.   {$EXTERNALSYM TBM_GETSELEND}
  3035.   TBM_GETSELEND           = WM_USER+18;
  3036.   {$EXTERNALSYM TBM_CLEARSEL}
  3037.   TBM_CLEARSEL            = WM_USER+19;
  3038.   {$EXTERNALSYM TBM_SETTICFREQ}
  3039.   TBM_SETTICFREQ          = WM_USER+20;
  3040.   {$EXTERNALSYM TBM_SETPAGESIZE}
  3041.   TBM_SETPAGESIZE         = WM_USER+21;
  3042.   {$EXTERNALSYM TBM_GETPAGESIZE}
  3043.   TBM_GETPAGESIZE         = WM_USER+22;
  3044.   {$EXTERNALSYM TBM_SETLINESIZE}
  3045.   TBM_SETLINESIZE         = WM_USER+23;
  3046.   {$EXTERNALSYM TBM_GETLINESIZE}
  3047.   TBM_GETLINESIZE         = WM_USER+24;
  3048.   {$EXTERNALSYM TBM_GETTHUMBRECT}
  3049.   TBM_GETTHUMBRECT        = WM_USER+25;
  3050.   {$EXTERNALSYM TBM_GETCHANNELRECT}
  3051.   TBM_GETCHANNELRECT      = WM_USER+26;
  3052.   {$EXTERNALSYM TBM_SETTHUMBLENGTH}
  3053.   TBM_SETTHUMBLENGTH      = WM_USER+27;
  3054.   {$EXTERNALSYM TBM_GETTHUMBLENGTH}
  3055.   TBM_GETTHUMBLENGTH      = WM_USER+28;
  3056.   {$EXTERNALSYM TBM_SETTOOLTIPS}
  3057.   TBM_SETTOOLTIPS         = WM_USER+29;
  3058.   {$EXTERNALSYM TBM_GETTOOLTIPS}
  3059.   TBM_GETTOOLTIPS         = WM_USER+30;
  3060.   {$EXTERNALSYM TBM_SETTIPSIDE}
  3061.   TBM_SETTIPSIDE          = WM_USER+31;
  3062.  
  3063.   // TrackBar Tip Side flags
  3064.   {$EXTERNALSYM TBTS_TOP}
  3065.   TBTS_TOP                = 0;
  3066.   {$EXTERNALSYM TBTS_LEFT}
  3067.   TBTS_LEFT               = 1;
  3068.   {$EXTERNALSYM TBTS_BOTTOM}
  3069.   TBTS_BOTTOM             = 2;
  3070.   {$EXTERNALSYM TBTS_RIGHT}
  3071.   TBTS_RIGHT              = 3;
  3072.  
  3073.   {$EXTERNALSYM TBM_SETBUDDY}
  3074.   TBM_SETBUDDY            = WM_USER+32; // wparam = BOOL fLeft; (or right)
  3075.   {$EXTERNALSYM TBM_GETBUDDY}
  3076.   TBM_GETBUDDY            = WM_USER+33; // wparam = BOOL fLeft; (or right)
  3077.   {$EXTERNALSYM TBM_SETUNICODEFORMAT}
  3078.   TBM_SETUNICODEFORMAT    = CCM_SETUNICODEFORMAT;
  3079.   {$EXTERNALSYM TBM_GETUNICODEFORMAT}
  3080.   TBM_GETUNICODEFORMAT    = CCM_GETUNICODEFORMAT;
  3081.  
  3082.   {$EXTERNALSYM TB_LINEUP}
  3083.   TB_LINEUP               = 0;
  3084.   {$EXTERNALSYM TB_LINEDOWN}
  3085.   TB_LINEDOWN             = 1;
  3086.   {$EXTERNALSYM TB_PAGEUP}
  3087.   TB_PAGEUP               = 2;
  3088.   {$EXTERNALSYM TB_PAGEDOWN}
  3089.   TB_PAGEDOWN             = 3;
  3090.   {$EXTERNALSYM TB_THUMBPOSITION}
  3091.   TB_THUMBPOSITION        = 4;
  3092.   {$EXTERNALSYM TB_THUMBTRACK}
  3093.   TB_THUMBTRACK           = 5;
  3094.   {$EXTERNALSYM TB_TOP}
  3095.   TB_TOP                  = 6;
  3096.   {$EXTERNALSYM TB_BOTTOM}
  3097.   TB_BOTTOM               = 7;
  3098.   {$EXTERNALSYM TB_ENDTRACK}
  3099.   TB_ENDTRACK             = 8;
  3100.  
  3101.   // custom draw item specs
  3102.   {$EXTERNALSYM TBCD_TICS}
  3103.   TBCD_TICS    = $0001;
  3104.   {$EXTERNALSYM TBCD_THUMB}
  3105.   TBCD_THUMB   = $0002;
  3106.   {$EXTERNALSYM TBCD_CHANNEL}
  3107.   TBCD_CHANNEL = $0003;
  3108.  
  3109. { ====== DRAG LIST CONTROL ================== }
  3110.  
  3111. type
  3112.   PDragListInfo = ^TDragListInfo;
  3113.   {$EXTERNALSYM tagDRAGLISTINFO}
  3114.   tagDRAGLISTINFO = packed record
  3115.     uNotification: UINT;
  3116.     hWnd: HWND;
  3117.     ptCursor: TPoint;
  3118.   end;
  3119.   TDragListInfo = tagDRAGLISTINFO;
  3120.   {$EXTERNALSYM DRAGLISTINFO}
  3121.   DRAGLISTINFO = tagDRAGLISTINFO;
  3122.  
  3123. const
  3124.   {$EXTERNALSYM DL_BEGINDRAG}
  3125.   DL_BEGINDRAG            = WM_USER+133;
  3126.   {$EXTERNALSYM DL_DRAGGING}
  3127.   DL_DRAGGING             = WM_USER+134;
  3128.   {$EXTERNALSYM DL_DROPPED}
  3129.   DL_DROPPED              = WM_USER+135;
  3130.   {$EXTERNALSYM DL_CANCELDRAG}
  3131.   DL_CANCELDRAG           = WM_USER+136;
  3132.  
  3133.   {$EXTERNALSYM DL_CURSORSET}
  3134.   DL_CURSORSET            = 0;
  3135.   {$EXTERNALSYM DL_STOPCURSOR}
  3136.   DL_STOPCURSOR           = 1;
  3137.   {$EXTERNALSYM DL_COPYCURSOR}
  3138.   DL_COPYCURSOR           = 2;
  3139.   {$EXTERNALSYM DL_MOVECURSOR}
  3140.   DL_MOVECURSOR           = 3;
  3141.  
  3142. const
  3143.   {$EXTERNALSYM DRAGLISTMSGSTRING}
  3144.   DRAGLISTMSGSTRING = 'commctrl_DragListMsg';
  3145.  
  3146. {$EXTERNALSYM MakeDragList}
  3147. procedure MakeDragList(hLB: HWND); stdcall;
  3148. {$EXTERNALSYM DrawInsert}
  3149. procedure DrawInsert(hwndParent: HWND; hLB: HWND; nItem: Integer); stdcall;
  3150. {$EXTERNALSYM LBItemFromPt}
  3151. function LBItemFromPt(hLB: HWND; pt: TPoint; bAutoScroll: Bool): Integer; stdcall;
  3152.  
  3153.  
  3154. { ====== UPDOWN CONTROL ========================== }
  3155.  
  3156. const
  3157.   {$EXTERNALSYM UPDOWN_CLASS}
  3158.   UPDOWN_CLASS = 'msctls_updown32';
  3159.  
  3160. type
  3161.   PUDAccel = ^TUDAccel;
  3162.   {$EXTERNALSYM _UDACCEL}
  3163.   _UDACCEL = packed record
  3164.     nSec: UINT;
  3165.     nInc: UINT;
  3166.   end;
  3167.   TUDAccel = _UDACCEL;
  3168.   {$EXTERNALSYM UDACCEL}
  3169.   UDACCEL = _UDACCEL;
  3170.  
  3171. const
  3172.   {$EXTERNALSYM UD_MAXVAL}
  3173.   UD_MAXVAL               = $7fff;
  3174.   {$EXTERNALSYM UD_MINVAL}
  3175.   UD_MINVAL               = -UD_MAXVAL;
  3176.  
  3177.   {$EXTERNALSYM UDS_WRAP}
  3178.   UDS_WRAP                = $0001;
  3179.   {$EXTERNALSYM UDS_SETBUDDYINT}
  3180.   UDS_SETBUDDYINT         = $0002;
  3181.   {$EXTERNALSYM UDS_ALIGNRIGHT}
  3182.   UDS_ALIGNRIGHT          = $0004;
  3183.   {$EXTERNALSYM UDS_ALIGNLEFT}
  3184.   UDS_ALIGNLEFT           = $0008;
  3185.   {$EXTERNALSYM UDS_AUTOBUDDY}
  3186.   UDS_AUTOBUDDY           = $0010;
  3187.   {$EXTERNALSYM UDS_ARROWKEYS}
  3188.   UDS_ARROWKEYS           = $0020;
  3189.   {$EXTERNALSYM UDS_HORZ}
  3190.   UDS_HORZ                = $0040;
  3191.   {$EXTERNALSYM UDS_NOTHOUSANDS}
  3192.   UDS_NOTHOUSANDS         = $0080;
  3193.   {$EXTERNALSYM UDS_HOTTRACK}
  3194.   UDS_HOTTRACK            = $0100;
  3195.  
  3196.  
  3197.   {$EXTERNALSYM UDM_SETRANGE}
  3198.   UDM_SETRANGE            = WM_USER+101;
  3199.   {$EXTERNALSYM UDM_GETRANGE}
  3200.   UDM_GETRANGE            = WM_USER+102;
  3201.   {$EXTERNALSYM UDM_SETPOS}
  3202.   UDM_SETPOS              = WM_USER+103;
  3203.   {$EXTERNALSYM UDM_GETPOS}
  3204.   UDM_GETPOS              = WM_USER+104;
  3205.   {$EXTERNALSYM UDM_SETBUDDY}
  3206.   UDM_SETBUDDY            = WM_USER+105;
  3207.   {$EXTERNALSYM UDM_GETBUDDY}
  3208.   UDM_GETBUDDY            = WM_USER+106;
  3209.   {$EXTERNALSYM UDM_SETACCEL}
  3210.   UDM_SETACCEL            = WM_USER+107;
  3211.   {$EXTERNALSYM UDM_GETACCEL}
  3212.   UDM_GETACCEL            = WM_USER+108;
  3213.   {$EXTERNALSYM UDM_SETBASE}
  3214.   UDM_SETBASE             = WM_USER+109;
  3215.   {$EXTERNALSYM UDM_GETBASE}
  3216.   UDM_GETBASE             = WM_USER+110;
  3217.   {$EXTERNALSYM UDM_SETRANGE32}
  3218.   UDM_SETRANGE32          = WM_USER+111;
  3219.   {$EXTERNALSYM UDM_GETRANGE32}
  3220.   UDM_GETRANGE32          = WM_USER+112; // wParam & lParam are LPINT
  3221.   {$EXTERNALSYM UDM_SETUNICODEFORMAT}
  3222.   UDM_SETUNICODEFORMAT    = CCM_SETUNICODEFORMAT;
  3223.   {$EXTERNALSYM UDM_GETUNICODEFORMAT}
  3224.   UDM_GETUNICODEFORMAT    = CCM_GETUNICODEFORMAT;
  3225.  
  3226. {$EXTERNALSYM CreateUpDownControl}
  3227. function CreateUpDownControl(dwStyle: Longint; X, Y, CX, CY: Integer;
  3228.   hParent: HWND;  nID: Integer; hInst: THandle; hBuddy: HWND;
  3229.   nUpper, nLower, nPos: Integer): HWND; stdcall;
  3230.  
  3231. type
  3232.   PNMUpDown = ^TNMUpDown;
  3233.   {$EXTERNALSYM _NM_UPDOWN}
  3234.   _NM_UPDOWN = packed record
  3235.     hdr: TNMHDR;
  3236.     iPos: Integer;
  3237.     iDelta: Integer;
  3238.   end;
  3239.   TNMUpDown = _NM_UPDOWN;
  3240.   {$EXTERNALSYM NM_UPDOWN}
  3241.   NM_UPDOWN = _NM_UPDOWN;
  3242.  
  3243. const
  3244.   {$EXTERNALSYM UDN_DELTAPOS}
  3245.   UDN_DELTAPOS = UDN_FIRST - 1;
  3246.  
  3247.  
  3248. { ====== PROGRESS CONTROL ========================= }
  3249.  
  3250. const
  3251.   {$EXTERNALSYM PROGRESS_CLASS}
  3252.   PROGRESS_CLASS = 'msctls_progress32';
  3253.  
  3254. type
  3255.   {$EXTERNALSYM PBRANGE}
  3256.   PBRANGE = record
  3257.     iLow: Integer;
  3258.     iHigh: Integer;
  3259.   end;
  3260.   PPBRange = ^TPBRange;
  3261.   TPBRange = PBRANGE;
  3262.  
  3263. const
  3264.   {$EXTERNALSYM PBS_SMOOTH}
  3265.   PBS_SMOOTH              = 01;
  3266.   {$EXTERNALSYM PBS_VERTICAL}
  3267.   PBS_VERTICAL            = 04;
  3268.   
  3269.   {$EXTERNALSYM PBM_SETRANGE}
  3270.   PBM_SETRANGE            = WM_USER+1;
  3271.   {$EXTERNALSYM PBM_SETPOS}
  3272.   PBM_SETPOS              = WM_USER+2;
  3273.   {$EXTERNALSYM PBM_DELTAPOS}
  3274.   PBM_DELTAPOS            = WM_USER+3;
  3275.   {$EXTERNALSYM PBM_SETSTEP}
  3276.   PBM_SETSTEP             = WM_USER+4;
  3277.   {$EXTERNALSYM PBM_STEPIT}
  3278.   PBM_STEPIT              = WM_USER+5;
  3279.   {$EXTERNALSYM PBM_SETRANGE32}
  3280.   PBM_SETRANGE32          = WM_USER+6;   // lParam = high, wParam = low
  3281.   {$EXTERNALSYM PBM_GETRANGE}
  3282.   PBM_GETRANGE            = WM_USER+7;   // lParam = PPBRange or Nil
  3283.                      // wParam = False: Result = high
  3284.                      // wParam = True: Result = low
  3285.   {$EXTERNALSYM PBM_GETPOS}
  3286.   PBM_GETPOS              = WM_USER+8;
  3287.   {$EXTERNALSYM PBM_SETBARCOLOR}
  3288.   PBM_SETBARCOLOR         = WM_USER+9;        // lParam = bar color
  3289.   {$EXTERNALSYM PBM_SETBKCOLOR}
  3290.   PBM_SETBKCOLOR          = CCM_SETBKCOLOR;  // lParam = bkColor
  3291.  
  3292.  
  3293. {  ====== HOTKEY CONTROL ========================== }
  3294.  
  3295. const
  3296.   {$EXTERNALSYM HOTKEYF_SHIFT}
  3297.   HOTKEYF_SHIFT           = $01;
  3298.   {$EXTERNALSYM HOTKEYF_CONTROL}
  3299.   HOTKEYF_CONTROL         = $02;
  3300.   {$EXTERNALSYM HOTKEYF_ALT}
  3301.   HOTKEYF_ALT             = $04;
  3302.   {$EXTERNALSYM HOTKEYF_EXT}
  3303.   HOTKEYF_EXT             = $08;
  3304.  
  3305.   {$EXTERNALSYM HKCOMB_NONE}
  3306.   HKCOMB_NONE             = $0001;
  3307.   {$EXTERNALSYM HKCOMB_S}
  3308.   HKCOMB_S                = $0002;
  3309.   {$EXTERNALSYM HKCOMB_C}
  3310.   HKCOMB_C                = $0004;
  3311.   {$EXTERNALSYM HKCOMB_A}
  3312.   HKCOMB_A                = $0008;
  3313.   {$EXTERNALSYM HKCOMB_SC}
  3314.   HKCOMB_SC               = $0010;
  3315.   {$EXTERNALSYM HKCOMB_SA}
  3316.   HKCOMB_SA               = $0020;
  3317.   {$EXTERNALSYM HKCOMB_CA}
  3318.   HKCOMB_CA               = $0040;
  3319.   {$EXTERNALSYM HKCOMB_SCA}
  3320.   HKCOMB_SCA              = $0080;
  3321.  
  3322.  
  3323.   {$EXTERNALSYM HKM_SETHOTKEY}
  3324.   HKM_SETHOTKEY           = WM_USER+1;
  3325.   {$EXTERNALSYM HKM_GETHOTKEY}
  3326.   HKM_GETHOTKEY           = WM_USER+2;
  3327.   {$EXTERNALSYM HKM_SETRULES}
  3328.   HKM_SETRULES            = WM_USER+3;
  3329.  
  3330. const
  3331.   HOTKEYCLASS = 'msctls_hotkey32';
  3332.  
  3333.  
  3334. { ====== COMMON CONTROL STYLES ================ }
  3335.  
  3336. const
  3337.   {$EXTERNALSYM CCS_TOP}
  3338.   CCS_TOP                 = $00000001;
  3339.   {$EXTERNALSYM CCS_NOMOVEY}
  3340.   CCS_NOMOVEY             = $00000002;
  3341.   {$EXTERNALSYM CCS_BOTTOM}
  3342.   CCS_BOTTOM              = $00000003;
  3343.   {$EXTERNALSYM CCS_NORESIZE}
  3344.   CCS_NORESIZE            = $00000004;
  3345.   {$EXTERNALSYM CCS_NOPARENTALIGN}
  3346.   CCS_NOPARENTALIGN       = $00000008;
  3347.   {$EXTERNALSYM CCS_ADJUSTABLE}
  3348.   CCS_ADJUSTABLE          = $00000020;
  3349.   {$EXTERNALSYM CCS_NODIVIDER}
  3350.   CCS_NODIVIDER           = $00000040;
  3351.   {$EXTERNALSYM CCS_VERT}
  3352.   CCS_VERT                = $00000080;
  3353.   {$EXTERNALSYM CCS_LEFT}
  3354.   CCS_LEFT                = (CCS_VERT or CCS_TOP);
  3355.   {$EXTERNALSYM CCS_RIGHT}
  3356.   CCS_RIGHT               = (CCS_VERT or CCS_BOTTOM);
  3357.   {$EXTERNALSYM CCS_NOMOVEX}
  3358.   CCS_NOMOVEX             = (CCS_VERT or CCS_NOMOVEY);
  3359.  
  3360.  
  3361. { ====== LISTVIEW CONTROL ====================== }
  3362.  
  3363. const
  3364.   {$EXTERNALSYM WC_LISTVIEW}
  3365.   WC_LISTVIEW = 'SysListView32';
  3366.  
  3367. const
  3368.  
  3369.   { List View Styles }
  3370.   {$EXTERNALSYM LVS_ICON}
  3371.   LVS_ICON                = $0000;
  3372.   {$EXTERNALSYM LVS_REPORT}
  3373.   LVS_REPORT              = $0001;
  3374.   {$EXTERNALSYM LVS_SMALLICON}
  3375.   LVS_SMALLICON           = $0002;
  3376.   {$EXTERNALSYM LVS_LIST}
  3377.   LVS_LIST                = $0003;
  3378.   {$EXTERNALSYM LVS_TYPEMASK}
  3379.   LVS_TYPEMASK            = $0003;
  3380.   {$EXTERNALSYM LVS_SINGLESEL}
  3381.   LVS_SINGLESEL           = $0004;
  3382.   {$EXTERNALSYM LVS_SHOWSELALWAYS}
  3383.   LVS_SHOWSELALWAYS       = $0008;
  3384.   {$EXTERNALSYM LVS_SORTASCENDING}
  3385.   LVS_SORTASCENDING       = $0010;
  3386.   {$EXTERNALSYM LVS_SORTDESCENDING}
  3387.   LVS_SORTDESCENDING      = $0020;
  3388.   {$EXTERNALSYM LVS_SHAREIMAGELISTS}
  3389.   LVS_SHAREIMAGELISTS     = $0040;
  3390.   {$EXTERNALSYM LVS_NOLABELWRAP}
  3391.   LVS_NOLABELWRAP         = $0080;
  3392.   {$EXTERNALSYM LVS_AUTOARRANGE}
  3393.   LVS_AUTOARRANGE         = $0100;
  3394.   {$EXTERNALSYM LVS_EDITLABELS}
  3395.   LVS_EDITLABELS          = $0200;
  3396.   {$EXTERNALSYM LVS_OWNERDATA}
  3397.   LVS_OWNERDATA           = $1000; 
  3398.   {$EXTERNALSYM LVS_NOSCROLL}
  3399.   LVS_NOSCROLL            = $2000;
  3400.  
  3401.   {$EXTERNALSYM LVS_TYPESTYLEMASK}
  3402.   LVS_TYPESTYLEMASK       = $FC00;
  3403.  
  3404.   {$EXTERNALSYM LVS_ALIGNTOP}
  3405.   LVS_ALIGNTOP            = $0000;
  3406.   {$EXTERNALSYM LVS_ALIGNLEFT}
  3407.   LVS_ALIGNLEFT           = $0800;
  3408.   {$EXTERNALSYM LVS_ALIGNMASK}
  3409.   LVS_ALIGNMASK           = $0c00;
  3410.  
  3411.   {$EXTERNALSYM LVS_OWNERDRAWFIXED}
  3412.   LVS_OWNERDRAWFIXED      = $0400;
  3413.   {$EXTERNALSYM LVS_NOCOLUMNHEADER}
  3414.   LVS_NOCOLUMNHEADER      = $4000;
  3415.   {$EXTERNALSYM LVS_NOSORTHEADER}
  3416.   LVS_NOSORTHEADER        = $8000;
  3417.  
  3418.   { List View Extended Styles }
  3419.   {$EXTERNALSYM LVS_EX_GRIDLINES}
  3420.   LVS_EX_GRIDLINES        = $00000001;
  3421.   {$EXTERNALSYM LVS_EX_SUBITEMIMAGES}
  3422.   LVS_EX_SUBITEMIMAGES    = $00000002;
  3423.   {$EXTERNALSYM LVS_EX_CHECKBOXES}
  3424.   LVS_EX_CHECKBOXES       = $00000004;
  3425.   {$EXTERNALSYM LVS_EX_TRACKSELECT}
  3426.   LVS_EX_TRACKSELECT      = $00000008;
  3427.   {$EXTERNALSYM LVS_EX_HEADERDRAGDROP}
  3428.   LVS_EX_HEADERDRAGDROP   = $00000010;
  3429.   {$EXTERNALSYM LVS_EX_FULLROWSELECT}
  3430.   LVS_EX_FULLROWSELECT    = $00000020; // applies to report mode only
  3431.   {$EXTERNALSYM LVS_EX_ONECLICKACTIVATE}
  3432.   LVS_EX_ONECLICKACTIVATE = $00000040;
  3433.   {$EXTERNALSYM LVS_EX_TWOCLICKACTIVATE}
  3434.   LVS_EX_TWOCLICKACTIVATE = $00000080;
  3435.   {$EXTERNALSYM LVS_EX_FLATSB}
  3436.   LVS_EX_FLATSB           = $00000100;
  3437.   {$EXTERNALSYM LVS_EX_REGIONAL}
  3438.   LVS_EX_REGIONAL         = $00000200;
  3439.   {$EXTERNALSYM LVS_EX_INFOTIP}
  3440.   LVS_EX_INFOTIP          = $00000400; // listview does InfoTips for you
  3441.   {$EXTERNALSYM LVS_EX_UNDERLINEHOT}
  3442.   LVS_EX_UNDERLINEHOT     = $00000800;
  3443.   {$EXTERNALSYM LVS_EX_UNDERLINECOLD}
  3444.   LVS_EX_UNDERLINECOLD    = $00001000;
  3445.   {$EXTERNALSYM LVS_EX_MULTIWORKAREAS}
  3446.   LVS_EX_MULTIWORKAREAS   = $00002000;
  3447.  
  3448. const
  3449.   {$EXTERNALSYM LVM_SETUNICODEFORMAT}
  3450.   LVM_SETUNICODEFORMAT     = CCM_SETUNICODEFORMAT;
  3451.  
  3452. {$EXTERNALSYM ListView_SetUnicodeFormat}
  3453. function ListView_SetUnicodeFormat(hwnd: HWND; fUnicode: BOOL): Integer;
  3454.  
  3455. const
  3456.   {$EXTERNALSYM LVM_GETUNICODEFORMAT}
  3457.   LVM_GETUNICODEFORMAT     = CCM_GETUNICODEFORMAT;
  3458.  
  3459. {$EXTERNALSYM ListView_GetUnicodeFormat}
  3460. function ListView_GetUnicodeFormat(hwnd: HWND): BOOL;
  3461.  
  3462. const
  3463.   {$EXTERNALSYM LVM_GETBKCOLOR}
  3464.   LVM_GETBKCOLOR          = LVM_FIRST + 0;
  3465.  
  3466. {$EXTERNALSYM ListView_GetBkColor}
  3467. function ListView_GetBkColor(hWnd: HWND): TColorRef;
  3468.  
  3469. const
  3470.   {$EXTERNALSYM LVM_SETBKCOLOR}
  3471.   LVM_SETBKCOLOR          = LVM_FIRST + 1;
  3472.  
  3473. {$EXTERNALSYM ListView_SetBkColor}
  3474. function ListView_SetBkColor(hWnd: HWND; clrBk: TColorRef): Bool;
  3475.  
  3476. const
  3477.   {$EXTERNALSYM LVM_GETIMAGELIST}
  3478.   LVM_GETIMAGELIST        = LVM_FIRST + 2;
  3479.  
  3480. {$EXTERNALSYM ListView_GetImageList}
  3481. function ListView_GetImageList(hWnd: HWND; iImageList: Integer): HIMAGELIST;
  3482.  
  3483. const
  3484.   {$EXTERNALSYM LVSIL_NORMAL}
  3485.   LVSIL_NORMAL            = 0;
  3486.   {$EXTERNALSYM LVSIL_SMALL}
  3487.   LVSIL_SMALL             = 1;
  3488.   {$EXTERNALSYM LVSIL_STATE}
  3489.   LVSIL_STATE             = 2;
  3490.  
  3491. const
  3492.   {$EXTERNALSYM LVM_SETIMAGELIST}
  3493.   LVM_SETIMAGELIST        = LVM_FIRST + 3;
  3494.  
  3495. {$EXTERNALSYM ListView_SetImageList}
  3496. function ListView_SetImageList(hWnd: HWND; himl: HIMAGELIST;
  3497.   iImageList: Integer): HIMAGELIST;
  3498.  
  3499. const
  3500.   {$EXTERNALSYM LVM_GETITEMCOUNT}
  3501.   LVM_GETITEMCOUNT        = LVM_FIRST + 4;
  3502.  
  3503. {$EXTERNALSYM ListView_GetItemCount}
  3504. function ListView_GetItemCount(hWnd: HWND): Integer;
  3505.  
  3506. const
  3507.   {$EXTERNALSYM LVIF_TEXT}
  3508.   LVIF_TEXT               = $0001;
  3509.   {$EXTERNALSYM LVIF_IMAGE}
  3510.   LVIF_IMAGE              = $0002;
  3511.   {$EXTERNALSYM LVIF_PARAM}
  3512.   LVIF_PARAM              = $0004;
  3513.   {$EXTERNALSYM LVIF_STATE}
  3514.   LVIF_STATE              = $0008;
  3515.   {$EXTERNALSYM LVIF_INDENT}
  3516.   LVIF_INDENT             = $0010;
  3517.   {$EXTERNALSYM LVIF_NORECOMPUTE}
  3518.   LVIF_NORECOMPUTE        = $0800;
  3519.  
  3520.   {$EXTERNALSYM LVIS_FOCUSED}
  3521.   LVIS_FOCUSED            = $0001;
  3522.   {$EXTERNALSYM LVIS_SELECTED}
  3523.   LVIS_SELECTED           = $0002;
  3524.   {$EXTERNALSYM LVIS_CUT}
  3525.   LVIS_CUT                = $0004;
  3526.   {$EXTERNALSYM LVIS_DROPHILITED}
  3527.   LVIS_DROPHILITED        = $0008;
  3528.   {$EXTERNALSYM LVIS_ACTIVATING}
  3529.   LVIS_ACTIVATING         = $0020;
  3530.  
  3531.   {$EXTERNALSYM LVIS_OVERLAYMASK}
  3532.   LVIS_OVERLAYMASK        = $0F00;
  3533.   {$EXTERNALSYM LVIS_STATEIMAGEMASK}
  3534.   LVIS_STATEIMAGEMASK     = $F000;
  3535.  
  3536. {$EXTERNALSYM IndexToStateImageMask}
  3537. function IndexToStateImageMask(I: Longint): Longint;
  3538.  
  3539. const
  3540.   {$EXTERNALSYM I_INDENTCALLBACK}
  3541.   I_INDENTCALLBACK        = -1;
  3542.  
  3543. type
  3544.   PLVItemA = ^TLVItemA;
  3545.   PLVItemW = ^TLVItemW;
  3546.   PLVItem = PLVItemA;
  3547.   {$EXTERNALSYM tagLVITEMA}
  3548.   tagLVITEMA = packed record
  3549.     mask: UINT;
  3550.     iItem: Integer;
  3551.     iSubItem: Integer;
  3552.     state: UINT;
  3553.     stateMask: UINT;
  3554.     pszText: PAnsiChar;
  3555.     cchTextMax: Integer;
  3556.     iImage: Integer;
  3557.     lParam: LPARAM;
  3558.     iIndent: Integer;
  3559.   end;
  3560.   {$EXTERNALSYM tagLVITEMW}
  3561.   tagLVITEMW = packed record
  3562.     mask: UINT;
  3563.     iItem: Integer;
  3564.     iSubItem: Integer;
  3565.     state: UINT;
  3566.     stateMask: UINT;
  3567.     pszText: PWideChar;
  3568.     cchTextMax: Integer;
  3569.     iImage: Integer;
  3570.     lParam: LPARAM;
  3571.     iIndent: Integer;
  3572.   end;
  3573.   {$EXTERNALSYM tagLVITEM}
  3574.   tagLVITEM = tagLVITEMA;
  3575.   {$EXTERNALSYM _LV_ITEMA}
  3576.   _LV_ITEMA = tagLVITEMA;
  3577.   {$EXTERNALSYM _LV_ITEMW}
  3578.   _LV_ITEMW = tagLVITEMW;
  3579.   {$EXTERNALSYM _LV_ITEM}
  3580.   _LV_ITEM = _LV_ITEMA;
  3581.   TLVItemA = tagLVITEMA;
  3582.   TLVItemW = tagLVITEMW;
  3583.   TLVItem = TLVItemA;
  3584.   {$EXTERNALSYM LV_ITEMA}
  3585.   LV_ITEMA = tagLVITEMA;
  3586.   {$EXTERNALSYM LV_ITEMW}
  3587.   LV_ITEMW = tagLVITEMW;
  3588.   {$EXTERNALSYM LV_ITEM}
  3589.   LV_ITEM = LV_ITEMA;
  3590.  
  3591. const
  3592.   {$EXTERNALSYM LPSTR_TEXTCALLBACKA}
  3593.   LPSTR_TEXTCALLBACKA = LPSTR(-1);
  3594.   {$EXTERNALSYM LPSTR_TEXTCALLBACKW}
  3595.   LPSTR_TEXTCALLBACKW = LPWSTR(-1);
  3596.  
  3597.  
  3598.  
  3599.  
  3600.  
  3601.   {$EXTERNALSYM LPSTR_TEXTCALLBACK}
  3602.   LPSTR_TEXTCALLBACK = LPSTR_TEXTCALLBACKA;
  3603.  
  3604.  
  3605.   {$EXTERNALSYM I_IMAGECALLBACK}
  3606.   I_IMAGECALLBACK         = -1;
  3607.  
  3608. const
  3609.   {$EXTERNALSYM LVM_GETITEMA}
  3610.   LVM_GETITEMA            = LVM_FIRST + 5;
  3611.   {$EXTERNALSYM LVM_SETITEMA}
  3612.   LVM_SETITEMA            = LVM_FIRST + 6;
  3613.   {$EXTERNALSYM LVM_INSERTITEMA}
  3614.   LVM_INSERTITEMA         = LVM_FIRST + 7;
  3615.  
  3616.   {$EXTERNALSYM LVM_GETITEMW}
  3617.   LVM_GETITEMW            = LVM_FIRST + 75;
  3618.   {$EXTERNALSYM LVM_SETITEMW}
  3619.   LVM_SETITEMW            = LVM_FIRST + 76;
  3620.   {$EXTERNALSYM LVM_INSERTITEMW}
  3621.   LVM_INSERTITEMW         = LVM_FIRST + 77;
  3622.  
  3623.  
  3624.  
  3625.  
  3626.  
  3627.  
  3628.  
  3629.  
  3630.  
  3631.   {$EXTERNALSYM LVM_GETITEM}
  3632.   LVM_GETITEM            = LVM_GETITEMA;
  3633.   {$EXTERNALSYM LVM_SETITEM}
  3634.   LVM_SETITEM            = LVM_SETITEMA;
  3635.   {$EXTERNALSYM LVM_INSERTITEM}
  3636.   LVM_INSERTITEM         = LVM_INSERTITEMA;
  3637.  
  3638.  
  3639.   {$EXTERNALSYM LVM_DELETEITEM}
  3640.   LVM_DELETEITEM          = LVM_FIRST + 8;
  3641.   {$EXTERNALSYM LVM_DELETEALLITEMS}
  3642.   LVM_DELETEALLITEMS      = LVM_FIRST + 9;
  3643.   {$EXTERNALSYM LVM_GETCALLBACKMASK}
  3644.   LVM_GETCALLBACKMASK     = LVM_FIRST + 10;
  3645.   {$EXTERNALSYM LVM_SETCALLBACKMASK}
  3646.   LVM_SETCALLBACKMASK     = LVM_FIRST + 11;
  3647.  
  3648. {$EXTERNALSYM ListView_GetItem}
  3649. function ListView_GetItem(hWnd: HWND; var pItem: TLVItem): Bool;
  3650. {$EXTERNALSYM ListView_GetItemA}
  3651. function ListView_GetItemA(hWnd: HWND; var pItem: TLVItemA): Bool;
  3652. {$EXTERNALSYM ListView_GetItemW}
  3653. function ListView_GetItemW(hWnd: HWND; var pItem: TLVItemW): Bool;
  3654. {$EXTERNALSYM ListView_SetItem}
  3655. function ListView_SetItem(hWnd: HWND; const pItem: TLVItem): Bool;
  3656. {$EXTERNALSYM ListView_SetItemA}
  3657. function ListView_SetItemA(hWnd: HWND; const pItem: TLVItemA): Bool;
  3658. {$EXTERNALSYM ListView_SetItemW}
  3659. function ListView_SetItemW(hWnd: HWND; const pItem: TLVItemW): Bool;
  3660. {$EXTERNALSYM ListView_InsertItem}
  3661. function ListView_InsertItem(hWnd: HWND; const pItem: TLVItem): Integer;
  3662. {$EXTERNALSYM ListView_InsertItemA}
  3663. function ListView_InsertItemA(hWnd: HWND; const pItem: TLVItemA): Integer;
  3664. {$EXTERNALSYM ListView_InsertItemW}
  3665. function ListView_InsertItemW(hWnd: HWND; const pItem: TLVItemW): Integer;
  3666. {$EXTERNALSYM ListView_DeleteItem}
  3667. function ListView_DeleteItem(hWnd: HWND; i: Integer): Bool;
  3668. {$EXTERNALSYM ListView_DeleteAllItems}
  3669. function ListView_DeleteAllItems(hWnd: HWND): Bool;
  3670. {$EXTERNALSYM ListView_GetCallbackMask}
  3671. function ListView_GetCallbackMask(hWnd: HWND): UINT;
  3672. {$EXTERNALSYM ListView_SetCallbackMask}
  3673. function ListView_SetCallbackMask(hWnd: HWND; mask: UINT): Bool;
  3674.  
  3675. const
  3676.   {$EXTERNALSYM LVNI_ALL}
  3677.   LVNI_ALL                = $0000;
  3678.   {$EXTERNALSYM LVNI_FOCUSED}
  3679.   LVNI_FOCUSED            = $0001;
  3680.   {$EXTERNALSYM LVNI_SELECTED}
  3681.   LVNI_SELECTED           = $0002;
  3682.   {$EXTERNALSYM LVNI_CUT}
  3683.   LVNI_CUT                = $0004;
  3684.   {$EXTERNALSYM LVNI_DROPHILITED}
  3685.   LVNI_DROPHILITED        = $0008;
  3686.  
  3687.   {$EXTERNALSYM LVNI_ABOVE}
  3688.   LVNI_ABOVE              = $0100;
  3689.   {$EXTERNALSYM LVNI_BELOW}
  3690.   LVNI_BELOW              = $0200;
  3691.   {$EXTERNALSYM LVNI_TOLEFT}
  3692.   LVNI_TOLEFT             = $0400;
  3693.   {$EXTERNALSYM LVNI_TORIGHT}
  3694.   LVNI_TORIGHT            = $0800;
  3695.  
  3696.  
  3697. const
  3698.   {$EXTERNALSYM LVM_GETNEXTITEM}
  3699.   LVM_GETNEXTITEM         = LVM_FIRST + 12;
  3700.  
  3701. {$EXTERNALSYM ListView_GetNextItem}
  3702. function ListView_GetNextItem(hWnd: HWND; iStart: Integer; Flags: UINT): Integer;
  3703.  
  3704. const
  3705.   {$EXTERNALSYM LVFI_PARAM}
  3706.   LVFI_PARAM              = $0001;
  3707.   {$EXTERNALSYM LVFI_STRING}
  3708.   LVFI_STRING             = $0002;
  3709.   {$EXTERNALSYM LVFI_PARTIAL}
  3710.   LVFI_PARTIAL            = $0008;
  3711.   {$EXTERNALSYM LVFI_WRAP}
  3712.   LVFI_WRAP               = $0020;
  3713.   {$EXTERNALSYM LVFI_NEARESTXY}
  3714.   LVFI_NEARESTXY          = $0040;
  3715.  
  3716.  
  3717. type
  3718.   PLVFindInfoA = ^TLVFindInfoA;
  3719.   PLVFindInfoW = ^TLVFindInfoW;
  3720.   PLVFindInfo = PLVFindInfoA;
  3721.   {$EXTERNALSYM tagLVFINDINFOA}
  3722.   tagLVFINDINFOA = packed record
  3723.     flags: UINT;
  3724.     psz: PAnsiChar;
  3725.     lParam: LPARAM;
  3726.     pt: TPoint;
  3727.     vkDirection: UINT;
  3728.   end;
  3729.   {$EXTERNALSYM tagLVFINDINFOW}
  3730.   tagLVFINDINFOW = packed record
  3731.     flags: UINT;
  3732.     psz: PWideChar;
  3733.     lParam: LPARAM;
  3734.     pt: TPoint;
  3735.     vkDirection: UINT;
  3736.   end;
  3737.   {$EXTERNALSYM tagLVFINDINFO}
  3738.   tagLVFINDINFO = tagLVFINDINFOA;
  3739.   {$EXTERNALSYM _LV_FINDINFOA}
  3740.   _LV_FINDINFOA = tagLVFINDINFOA;
  3741.   {$EXTERNALSYM _LV_FINDINFOW}
  3742.   _LV_FINDINFOW = tagLVFINDINFOW;
  3743.   {$EXTERNALSYM _LV_FINDINFO}
  3744.   _LV_FINDINFO = _LV_FINDINFOA;
  3745.   TLVFindInfoA = tagLVFINDINFOA;
  3746.   TLVFindInfoW = tagLVFINDINFOW;
  3747.   TLVFindInfo = TLVFindInfoA;
  3748.   {$EXTERNALSYM LV_FINDINFOA}
  3749.   LV_FINDINFOA = tagLVFINDINFOA;
  3750.   {$EXTERNALSYM LV_FINDINFOW}
  3751.   LV_FINDINFOW = tagLVFINDINFOW;
  3752.   {$EXTERNALSYM LV_FINDINFO}
  3753.   LV_FINDINFO = LV_FINDINFOA;
  3754.  
  3755. const
  3756.   {$EXTERNALSYM LVM_FINDITEMA}
  3757.   LVM_FINDITEMA            = LVM_FIRST + 13;
  3758.   {$EXTERNALSYM LVM_FINDITEMW}
  3759.   LVM_FINDITEMW            = LVM_FIRST + 83;
  3760.  
  3761.  
  3762.  
  3763.  
  3764.   {$EXTERNALSYM LVM_FINDITEM}
  3765.   LVM_FINDITEM            = LVM_FINDITEMA;
  3766.  
  3767.  
  3768. {$EXTERNALSYM ListView_FindItem}
  3769. function ListView_FindItem(hWnd: HWND; iStart: Integer;
  3770.   const plvfi: TLVFindInfo): Integer;
  3771. {$EXTERNALSYM ListView_FindItemA}
  3772. function ListView_FindItemA(hWnd: HWND; iStart: Integer;
  3773.   const plvfi: TLVFindInfoA): Integer;
  3774. {$EXTERNALSYM ListView_FindItemW}
  3775. function ListView_FindItemW(hWnd: HWND; iStart: Integer;
  3776.   const plvfi: TLVFindInfoW): Integer;
  3777.  
  3778. const
  3779.   {$EXTERNALSYM LVIR_BOUNDS}
  3780.   LVIR_BOUNDS             = 0;
  3781.   {$EXTERNALSYM LVIR_ICON}
  3782.   LVIR_ICON               = 1;
  3783.   {$EXTERNALSYM LVIR_LABEL}
  3784.   LVIR_LABEL              = 2;
  3785.   {$EXTERNALSYM LVIR_SELECTBOUNDS}
  3786.   LVIR_SELECTBOUNDS       = 3;
  3787.  
  3788.  
  3789. const
  3790.   {$EXTERNALSYM LVM_GETITEMRECT}
  3791.   LVM_GETITEMRECT         = LVM_FIRST + 14;
  3792.  
  3793. {$EXTERNALSYM ListView_GetItemRect}
  3794. function ListView_GetItemRect(hWnd: HWND; i: Integer; var prc: TRect;
  3795.   Code: Integer): Bool;
  3796.  
  3797. const
  3798.   {$EXTERNALSYM LVM_SETITEMPOSITION}
  3799.   LVM_SETITEMPOSITION     = LVM_FIRST + 15;
  3800.  
  3801. {$EXTERNALSYM ListView_SetItemPosition}
  3802. function ListView_SetItemPosition(hWnd: HWND; i, x, y: Integer): Bool;
  3803.  
  3804. const
  3805.   {$EXTERNALSYM LVM_GETITEMPOSITION}
  3806.   LVM_GETITEMPOSITION     = LVM_FIRST + 16;
  3807.  
  3808. {$EXTERNALSYM ListView_GetItemPosition}
  3809. function ListView_GetItemPosition(hwndLV: HWND; i: Integer; var ppt: TPoint): Bool;
  3810.  
  3811. const
  3812.   {$EXTERNALSYM LVM_GETSTRINGWIDTHA}
  3813.   LVM_GETSTRINGWIDTHA      = LVM_FIRST + 17;
  3814.   {$EXTERNALSYM LVM_GETSTRINGWIDTHW}
  3815.   LVM_GETSTRINGWIDTHW      = LVM_FIRST + 87;
  3816.  
  3817.  
  3818.  
  3819.  
  3820.   {$EXTERNALSYM LVM_GETSTRINGWIDTH}
  3821.   LVM_GETSTRINGWIDTH      = LVM_GETSTRINGWIDTHA;
  3822.  
  3823.  
  3824. {$EXTERNALSYM ListView_GetStringWidth}
  3825. function ListView_GetStringWidth(hwndLV: HWND; psz: PChar): Integer;
  3826. {$EXTERNALSYM ListView_GetStringWidthA}
  3827. function ListView_GetStringWidthA(hwndLV: HWND; psz: PAnsiChar): Integer;
  3828. {$EXTERNALSYM ListView_GetStringWidthW}
  3829. function ListView_GetStringWidthW(hwndLV: HWND; psz: PWideChar): Integer;
  3830.  
  3831. const
  3832.   {$EXTERNALSYM LVHT_NOWHERE}
  3833.   LVHT_NOWHERE            = $0001;
  3834.   {$EXTERNALSYM LVHT_ONITEMICON}
  3835.   LVHT_ONITEMICON         = $0002;
  3836.   {$EXTERNALSYM LVHT_ONITEMLABEL}
  3837.   LVHT_ONITEMLABEL        = $0004;
  3838.   {$EXTERNALSYM LVHT_ONITEMSTATEICON}
  3839.   LVHT_ONITEMSTATEICON    = $0008;
  3840.   {$EXTERNALSYM LVHT_ONITEM}
  3841.   LVHT_ONITEM             = LVHT_ONITEMICON or LVHT_ONITEMLABEL or
  3842.                 LVHT_ONITEMSTATEICON;
  3843.   {$EXTERNALSYM LVHT_ABOVE}
  3844.   LVHT_ABOVE              = $0008;
  3845.   {$EXTERNALSYM LVHT_BELOW}
  3846.   LVHT_BELOW              = $0010;
  3847.   {$EXTERNALSYM LVHT_TORIGHT}
  3848.   LVHT_TORIGHT            = $0020;
  3849.   {$EXTERNALSYM LVHT_TOLEFT}
  3850.   LVHT_TOLEFT             = $0040;
  3851.  
  3852. type
  3853.   PLVHitTestInfo = ^TLVHitTestInfo;
  3854.   {$EXTERNALSYM tagLVHITTESTINFO}
  3855.   tagLVHITTESTINFO = packed record
  3856.     pt: TPoint;
  3857.     flags: UINT;
  3858.     iItem: Integer;
  3859.     iSubItem: Integer;    // this is was NOT in win95.  valid only for LVM_SUBITEMHITTEST
  3860.   end;
  3861.   TLVHitTestInfo = tagLVHITTESTINFO;
  3862.   {$EXTERNALSYM LV_HITTESTINFO}
  3863.   LV_HITTESTINFO = tagLVHITTESTINFO;
  3864.   {$EXTERNALSYM _LV_HITTESTINFO}
  3865.   _LV_HITTESTINFO = tagLVHITTESTINFO;
  3866.  
  3867. const
  3868.   {$EXTERNALSYM LVM_HITTEST}
  3869.   LVM_HITTEST             = LVM_FIRST + 18;
  3870.  
  3871. {$EXTERNALSYM ListView_HitTest}
  3872. function ListView_HitTest(hwndLV: HWND; var pinfo: TLVHitTestInfo): Integer;
  3873.  
  3874. const
  3875.   {$EXTERNALSYM LVM_ENSUREVISIBLE}
  3876.   LVM_ENSUREVISIBLE       = LVM_FIRST + 19;
  3877.  
  3878. {$EXTERNALSYM ListView_EnsureVisible}
  3879. function ListView_EnsureVisible(hwndLV: HWND; i: Integer; fPartialOK: Bool): Bool;
  3880.  
  3881. const
  3882.   {$EXTERNALSYM LVM_SCROLL}
  3883.   LVM_SCROLL              = LVM_FIRST + 20;
  3884.  
  3885. {$EXTERNALSYM ListView_Scroll}
  3886. function ListView_Scroll(hwndLV: HWnd; DX, DY: Integer): Bool;
  3887.  
  3888. const
  3889.   {$EXTERNALSYM LVM_REDRAWITEMS}
  3890.   LVM_REDRAWITEMS         = LVM_FIRST + 21;
  3891.  
  3892. {$EXTERNALSYM ListView_RedrawItems}
  3893. function ListView_RedrawItems(hwndLV: HWND; iFirst, iLast: Integer): Bool;
  3894.  
  3895. const
  3896.   {$EXTERNALSYM LVA_DEFAULT}
  3897.   LVA_DEFAULT             = $0000;
  3898.   {$EXTERNALSYM LVA_ALIGNLEFT}
  3899.   LVA_ALIGNLEFT           = $0001;
  3900.   {$EXTERNALSYM LVA_ALIGNTOP}
  3901.   LVA_ALIGNTOP            = $0002;
  3902.   LVA_ALIGNRIGHT          = $0003;
  3903.   LVA_ALIGNBOTTOM         = $0004;
  3904.   {$EXTERNALSYM LVA_SNAPTOGRID}
  3905.   LVA_SNAPTOGRID          = $0005;
  3906.  
  3907.   LVA_SORTASCENDING       = $0100;
  3908.   LVA_SORTDESCENDING      = $0200;
  3909.  
  3910.   {$EXTERNALSYM LVM_ARRANGE}
  3911.   LVM_ARRANGE             = LVM_FIRST + 22;
  3912.  
  3913. {$EXTERNALSYM ListView_Arrange}
  3914. function ListView_Arrange(hwndLV: HWND; Code: UINT): Bool;
  3915.  
  3916.  
  3917. const
  3918.   {$EXTERNALSYM LVM_EDITLABELA}
  3919.   LVM_EDITLABELA           = LVM_FIRST + 23;
  3920.   {$EXTERNALSYM LVM_EDITLABELW}
  3921.   LVM_EDITLABELW           = LVM_FIRST + 118;
  3922.  
  3923.  
  3924.  
  3925.  
  3926.   {$EXTERNALSYM LVM_EDITLABEL}
  3927.   LVM_EDITLABEL           = LVM_EDITLABELA;
  3928.  
  3929.  
  3930. {$EXTERNALSYM ListView_EditLabel}
  3931. function ListView_EditLabel(hwndLV: HWND; i: Integer): HWND;
  3932. {$EXTERNALSYM ListView_EditLabelA}
  3933. function ListView_EditLabelA(hwndLV: HWND; i: Integer): HWND;
  3934. {$EXTERNALSYM ListView_EditLabelW}
  3935. function ListView_EditLabelW(hwndLV: HWND; i: Integer): HWND;
  3936.  
  3937. const
  3938.   {$EXTERNALSYM LVM_GETEDITCONTROL}
  3939.   LVM_GETEDITCONTROL      = LVM_FIRST + 24;
  3940.  
  3941. {$EXTERNALSYM ListView_GetEditControl}
  3942. function ListView_GetEditControl(hwndLV: HWND): HWND;
  3943.  
  3944. type
  3945.   PLVColumnA = ^TLVColumnA;
  3946.   PLVColumnW = ^TLVColumnW;
  3947.   PLVColumn = PLVColumnA;
  3948.   {$EXTERNALSYM tagLVCOLUMNA}
  3949.   tagLVCOLUMNA = packed record
  3950.     mask: UINT;
  3951.     fmt: Integer;
  3952.     cx: Integer;
  3953.     pszText: PAnsiChar;
  3954.     cchTextMax: Integer;
  3955.     iSubItem: Integer;
  3956.     iImage: Integer;
  3957.     iOrder: Integer;
  3958.   end;
  3959.   {$EXTERNALSYM tagLVCOLUMNW}
  3960.   tagLVCOLUMNW = packed record
  3961.     mask: UINT;
  3962.     fmt: Integer;
  3963.     cx: Integer;
  3964.     pszText: PWideChar;
  3965.     cchTextMax: Integer;
  3966.     iSubItem: Integer;
  3967.     iImage: Integer;
  3968.     iOrder: Integer;
  3969.   end;
  3970.   {$EXTERNALSYM tagLVCOLUMN}
  3971.   tagLVCOLUMN = tagLVCOLUMNA;
  3972.   {$EXTERNALSYM _LV_COLUMNA}
  3973.   _LV_COLUMNA = tagLVCOLUMNA;
  3974.   {$EXTERNALSYM _LV_COLUMNW}
  3975.   _LV_COLUMNW = tagLVCOLUMNW;
  3976.   {$EXTERNALSYM _LV_COLUMN}
  3977.   _LV_COLUMN = _LV_COLUMNA;
  3978.   TLVColumnA = tagLVCOLUMNA;
  3979.   TLVColumnW = tagLVCOLUMNW;
  3980.   TLVColumn = TLVColumnA;
  3981.   {$EXTERNALSYM LV_COLUMNA}
  3982.   LV_COLUMNA = tagLVCOLUMNA;
  3983.   {$EXTERNALSYM LV_COLUMNW}
  3984.   LV_COLUMNW = tagLVCOLUMNW;
  3985.   {$EXTERNALSYM LV_COLUMN}
  3986.   LV_COLUMN = LV_COLUMNA;
  3987.  
  3988. const
  3989.   {$EXTERNALSYM LVCF_FMT}
  3990.   LVCF_FMT                = $0001;
  3991.   {$EXTERNALSYM LVCF_WIDTH}
  3992.   LVCF_WIDTH              = $0002;
  3993.   {$EXTERNALSYM LVCF_TEXT}
  3994.   LVCF_TEXT               = $0004;
  3995.   {$EXTERNALSYM LVCF_SUBITEM}
  3996.   LVCF_SUBITEM            = $0008;
  3997.   {$EXTERNALSYM LVCF_IMAGE}
  3998.   LVCF_IMAGE              = $0010;
  3999.   {$EXTERNALSYM LVCF_ORDER}
  4000.   LVCF_ORDER              = $0020;
  4001.  
  4002.   {$EXTERNALSYM LVCFMT_LEFT}
  4003.   LVCFMT_LEFT             = $0000; 
  4004.   {$EXTERNALSYM LVCFMT_RIGHT}
  4005.   LVCFMT_RIGHT            = $0001;
  4006.   {$EXTERNALSYM LVCFMT_CENTER}
  4007.   LVCFMT_CENTER           = $0002; 
  4008.   {$EXTERNALSYM LVCFMT_JUSTIFYMASK}
  4009.   LVCFMT_JUSTIFYMASK      = $0003;
  4010.   {$EXTERNALSYM LVCFMT_IMAGE}
  4011.   LVCFMT_IMAGE            = $0800;
  4012.   {$EXTERNALSYM LVCFMT_BITMAP_ON_RIGHT}
  4013.   LVCFMT_BITMAP_ON_RIGHT  = $1000;
  4014.   {$EXTERNALSYM LVCFMT_COL_HAS_IMAGES}
  4015.   LVCFMT_COL_HAS_IMAGES   = $8000;
  4016.  
  4017.   {$EXTERNALSYM LVM_GETCOLUMNA}
  4018.   LVM_GETCOLUMNA          = LVM_FIRST + 25;
  4019.   {$EXTERNALSYM LVM_GETCOLUMNW}
  4020.   LVM_GETCOLUMNW          = LVM_FIRST + 95;
  4021.  
  4022.  
  4023.  
  4024.  
  4025.   {$EXTERNALSYM LVM_GETCOLUMN}
  4026.   LVM_GETCOLUMN           = LVM_GETCOLUMNA;
  4027.  
  4028.  
  4029. {$EXTERNALSYM ListView_GetColumn}
  4030. function ListView_GetColumn(hwnd: HWND; iCol: Integer;
  4031.   var pcol: TLVColumn): Bool;
  4032. {$EXTERNALSYM ListView_GetColumnA}
  4033. function ListView_GetColumnA(hwnd: HWND; iCol: Integer;
  4034.   var pcol: TLVColumnA): Bool;
  4035. {$EXTERNALSYM ListView_GetColumnW}
  4036. function ListView_GetColumnW(hwnd: HWND; iCol: Integer;
  4037.   var pcol: TLVColumnW): Bool;
  4038.  
  4039. const
  4040.   {$EXTERNALSYM LVM_SETCOLUMNA}
  4041.   LVM_SETCOLUMNA           = LVM_FIRST + 26;
  4042.   {$EXTERNALSYM LVM_SETCOLUMNW}
  4043.   LVM_SETCOLUMNW           = LVM_FIRST + 96;
  4044.  
  4045.  
  4046.  
  4047.  
  4048.   {$EXTERNALSYM LVM_SETCOLUMN}
  4049.   LVM_SETCOLUMN           = LVM_SETCOLUMNA;
  4050.  
  4051.  
  4052. {$EXTERNALSYM ListView_SetColumn}
  4053. function ListView_SetColumn(hwnd: HWnd; iCol: Integer; const pcol: TLVColumn): Bool;
  4054. {$EXTERNALSYM ListView_SetColumnA}
  4055. function ListView_SetColumnA(hwnd: HWnd; iCol: Integer; const pcol: TLVColumnA): Bool;
  4056. {$EXTERNALSYM ListView_SetColumnW}
  4057. function ListView_SetColumnW(hwnd: HWnd; iCol: Integer; const pcol: TLVColumnW): Bool;
  4058.  
  4059. const
  4060.   {$EXTERNALSYM LVM_INSERTCOLUMNA}
  4061.   LVM_INSERTCOLUMNA        = LVM_FIRST + 27;
  4062.   {$EXTERNALSYM LVM_INSERTCOLUMNW}
  4063.   LVM_INSERTCOLUMNW        = LVM_FIRST + 97;
  4064.  
  4065.  
  4066.  
  4067.  
  4068.   {$EXTERNALSYM LVM_INSERTCOLUMN}
  4069.   LVM_INSERTCOLUMN        = LVM_INSERTCOLUMNA;
  4070.  
  4071.  
  4072. {$EXTERNALSYM ListView_InsertColumn}
  4073. function ListView_InsertColumn(hwnd: HWND; iCol: Integer;
  4074.   const pcol: TLVColumn): Integer;
  4075. {$EXTERNALSYM ListView_InsertColumnA}
  4076. function ListView_InsertColumnA(hwnd: HWND; iCol: Integer;
  4077.   const pcol: TLVColumnA): Integer;
  4078. {$EXTERNALSYM ListView_InsertColumnW}
  4079. function ListView_InsertColumnW(hwnd: HWND; iCol: Integer;
  4080.   const pcol: TLVColumnW): Integer;
  4081.  
  4082. const
  4083.   {$EXTERNALSYM LVM_DELETECOLUMN}
  4084.   LVM_DELETECOLUMN        = LVM_FIRST + 28;
  4085.  
  4086. {$EXTERNALSYM ListView_DeleteColumn}
  4087. function ListView_DeleteColumn(hwnd: HWND; iCol: Integer): Bool;
  4088.  
  4089. const
  4090.   {$EXTERNALSYM LVM_GETCOLUMNWIDTH}
  4091.   LVM_GETCOLUMNWIDTH      = LVM_FIRST + 29;
  4092.  
  4093. {$EXTERNALSYM ListView_GetColumnWidth}
  4094. function ListView_GetColumnWidth(hwnd: HWND; iCol: Integer): Integer;
  4095.  
  4096. const
  4097.   {$EXTERNALSYM LVSCW_AUTOSIZE}
  4098.   LVSCW_AUTOSIZE              = -1;
  4099.   {$EXTERNALSYM LVSCW_AUTOSIZE_USEHEADER}
  4100.   LVSCW_AUTOSIZE_USEHEADER    = -2;
  4101.   {$EXTERNALSYM LVM_SETCOLUMNWIDTH}
  4102.   LVM_SETCOLUMNWIDTH          = LVM_FIRST + 30;
  4103.  
  4104. {$EXTERNALSYM ListView_SetColumnWidth}
  4105. function ListView_SetColumnWidth(hwnd: HWnd; iCol: Integer; cx: Integer): Bool;
  4106.  
  4107. const
  4108.   {$EXTERNALSYM LVM_GETHEADER}
  4109.   LVM_GETHEADER               = LVM_FIRST + 31;
  4110.  
  4111. {$EXTERNALSYM ListView_GetHeader}
  4112. function ListView_GetHeader(hwnd: HWND): HWND;
  4113.  
  4114. const
  4115.   {$EXTERNALSYM LVM_CREATEDRAGIMAGE}
  4116.   LVM_CREATEDRAGIMAGE     = LVM_FIRST + 33;
  4117.  
  4118. {$EXTERNALSYM ListView_CreateDragImage}
  4119. function ListView_CreateDragImage(hwnd: HWND; i: Integer;
  4120.   const lpptUpLeft: TPoint): HIMAGELIST;
  4121.  
  4122. const
  4123.   {$EXTERNALSYM LVM_GETVIEWRECT}
  4124.   LVM_GETVIEWRECT         = LVM_FIRST + 34;
  4125.  
  4126. {$EXTERNALSYM ListView_GetViewRect}
  4127. function ListView_GetViewRect(hwnd: HWND; var prc: TRect): Bool;
  4128.  
  4129. const
  4130.   {$EXTERNALSYM LVM_GETTEXTCOLOR}
  4131.   LVM_GETTEXTCOLOR        = LVM_FIRST + 35;
  4132.  
  4133. {$EXTERNALSYM ListView_GetTextColor}
  4134. function ListView_GetTextColor(hwnd: HWND): TColorRef;
  4135.  
  4136. const
  4137.   {$EXTERNALSYM LVM_SETTEXTCOLOR}
  4138.   LVM_SETTEXTCOLOR        = LVM_FIRST + 36;
  4139.  
  4140. {$EXTERNALSYM ListView_SetTextColor}
  4141. function ListView_SetTextColor(hwnd: HWND; clrText: TColorRef): Bool;
  4142.  
  4143. const
  4144.   {$EXTERNALSYM LVM_GETTEXTBKCOLOR}
  4145.   LVM_GETTEXTBKCOLOR      = LVM_FIRST + 37;
  4146.  
  4147. {$EXTERNALSYM ListView_GetTextBkColor}
  4148. function ListView_GetTextBkColor(hwnd: HWND): TColorRef;
  4149.  
  4150. const
  4151.   {$EXTERNALSYM LVM_SETTEXTBKCOLOR}
  4152.   LVM_SETTEXTBKCOLOR      = LVM_FIRST + 38;
  4153.  
  4154. {$EXTERNALSYM ListView_SetTextBkColor}
  4155. function ListView_SetTextBkColor(hwnd: HWND; clrTextBk: TColorRef): Bool;
  4156.  
  4157. const
  4158.   {$EXTERNALSYM LVM_GETTOPINDEX}
  4159.   LVM_GETTOPINDEX         = LVM_FIRST + 39;
  4160.  
  4161. {$EXTERNALSYM ListView_GetTopIndex}
  4162. function ListView_GetTopIndex(hwndLV: HWND): Integer;
  4163.  
  4164. const
  4165.   {$EXTERNALSYM LVM_GETCOUNTPERPAGE}
  4166.   LVM_GETCOUNTPERPAGE     = LVM_FIRST + 40;
  4167.  
  4168. {$EXTERNALSYM ListView_GetCountPerPage}
  4169. function ListView_GetCountPerPage(hwndLV: HWND): Integer;
  4170.  
  4171. const
  4172.   {$EXTERNALSYM LVM_GETORIGIN}
  4173.   LVM_GETORIGIN           = LVM_FIRST + 41;
  4174.  
  4175. {$EXTERNALSYM ListView_GetOrigin}
  4176. function ListView_GetOrigin(hwndLV: HWND; var ppt: TPoint): Bool;
  4177.  
  4178. const
  4179.   {$EXTERNALSYM LVM_UPDATE}
  4180.   LVM_UPDATE              = LVM_FIRST + 42;
  4181.  
  4182. {$EXTERNALSYM ListView_Update}
  4183. function ListView_Update(hwndLV: HWND; i: Integer): Bool;
  4184.  
  4185. const
  4186.   {$EXTERNALSYM LVM_SETITEMSTATE}
  4187.   LVM_SETITEMSTATE        = LVM_FIRST + 43;
  4188.  
  4189. {$EXTERNALSYM ListView_SetItemState}
  4190. function ListView_SetItemState(hwndLV: HWND; i: Integer; data, mask: UINT): Bool;
  4191.  
  4192. const
  4193.   {$EXTERNALSYM LVM_GETITEMSTATE}
  4194.   LVM_GETITEMSTATE        = LVM_FIRST + 44;
  4195.  
  4196. {$EXTERNALSYM ListView_GetItemState}
  4197. function ListView_GetItemState(hwndLV: HWND; i, mask: Integer): Integer;
  4198.  
  4199. {$EXTERNALSYM ListView_GetCheckState}
  4200. function ListView_GetCheckState(hwndLV: HWND; i: Integer): UINT;
  4201. {$EXTERNALSYM ListView_SetCheckState}
  4202. procedure ListView_SetCheckState(hwndLV: HWND; i: Integer; Checked: Boolean);
  4203.  
  4204. const
  4205.   {$EXTERNALSYM LVM_GETITEMTEXTA}
  4206.   LVM_GETITEMTEXTA         = LVM_FIRST + 45;
  4207.   {$EXTERNALSYM LVM_GETITEMTEXTW}
  4208.   LVM_GETITEMTEXTW         = LVM_FIRST + 115;
  4209.  
  4210.  
  4211.  
  4212.  
  4213.   {$EXTERNALSYM LVM_GETITEMTEXT}
  4214.   LVM_GETITEMTEXT         = LVM_GETITEMTEXTA;
  4215.  
  4216.  
  4217. {$EXTERNALSYM ListView_GetItemText}
  4218. function ListView_GetItemText(hwndLV: HWND; i, iSubItem: Integer;
  4219.   pszText: PChar; cchTextMax: Integer): Integer;
  4220. {$EXTERNALSYM ListView_GetItemTextA}
  4221. function ListView_GetItemTextA(hwndLV: HWND; i, iSubItem: Integer;
  4222.   pszText: PAnsiChar; cchTextMax: Integer): Integer;
  4223. {$EXTERNALSYM ListView_GetItemTextW}
  4224. function ListView_GetItemTextW(hwndLV: HWND; i, iSubItem: Integer;
  4225.   pszText: PWideChar; cchTextMax: Integer): Integer;
  4226.  
  4227. const
  4228.   {$EXTERNALSYM LVM_SETITEMTEXTA}
  4229.   LVM_SETITEMTEXTA         = LVM_FIRST + 46;
  4230.   {$EXTERNALSYM LVM_SETITEMTEXTW}
  4231.   LVM_SETITEMTEXTW         = LVM_FIRST + 116;
  4232.  
  4233.  
  4234.  
  4235.  
  4236.   {$EXTERNALSYM LVM_SETITEMTEXT}
  4237.   LVM_SETITEMTEXT         = LVM_SETITEMTEXTA;
  4238.  
  4239.  
  4240. {$EXTERNALSYM ListView_SetItemText}
  4241. function ListView_SetItemText(hwndLV: HWND; i, iSubItem: Integer;
  4242.   pszText: PChar): Bool;
  4243. {$EXTERNALSYM ListView_SetItemTextA}
  4244. function ListView_SetItemTextA(hwndLV: HWND; i, iSubItem: Integer;
  4245.   pszText: PAnsiChar): Bool;
  4246. {$EXTERNALSYM ListView_SetItemTextW}
  4247. function ListView_SetItemTextW(hwndLV: HWND; i, iSubItem: Integer;
  4248.   pszText: PWideChar): Bool;
  4249.  
  4250. const
  4251.   // these flags only apply to LVS_OWNERDATA listviews in report or list mode
  4252.   {$EXTERNALSYM LVSICF_NOINVALIDATEALL}
  4253.   LVSICF_NOINVALIDATEALL  = $00000001;
  4254.   {$EXTERNALSYM LVSICF_NOSCROLL}
  4255.   LVSICF_NOSCROLL         = $00000002;
  4256.  
  4257.   {$EXTERNALSYM LVM_SETITEMCOUNT}
  4258.   LVM_SETITEMCOUNT        = LVM_FIRST + 47;
  4259.  
  4260. {$EXTERNALSYM ListView_SetItemCount}
  4261. procedure ListView_SetItemCount(hwndLV: HWND; cItems: Integer);
  4262.  
  4263. {$EXTERNALSYM ListView_SetItemCountEx}
  4264. procedure ListView_SetItemCountEx(hwndLV: HWND; cItems: Integer; dwFlags: DWORD);
  4265.  
  4266. type
  4267.   {$EXTERNALSYM PFNLVCOMPARE}
  4268.   PFNLVCOMPARE = function(lParam1, lParam2, lParamSort: Integer): Integer stdcall;
  4269.   TLVCompare = PFNLVCOMPARE;
  4270.  
  4271. const
  4272.   {$EXTERNALSYM LVM_SORTITEMS}
  4273.   LVM_SORTITEMS           = LVM_FIRST + 48;
  4274.  
  4275. {$EXTERNALSYM ListView_SortItems}
  4276. function ListView_SortItems(hwndLV: HWND; pfnCompare: TLVCompare;
  4277.   lPrm: Longint): Bool;
  4278.  
  4279. const
  4280.   {$EXTERNALSYM LVM_SETITEMPOSITION32}
  4281.   LVM_SETITEMPOSITION32   = LVM_FIRST + 49;
  4282.  
  4283. {$EXTERNALSYM ListView_SetItemPosition32}
  4284. procedure ListView_SetItemPosition32(hwndLV: HWND; i, x, y: Integer);
  4285.  
  4286. const
  4287.   {$EXTERNALSYM LVM_GETSELECTEDCOUNT}
  4288.   LVM_GETSELECTEDCOUNT    = LVM_FIRST + 50;
  4289.  
  4290. {$EXTERNALSYM ListView_GetSelectedCount}
  4291. function ListView_GetSelectedCount(hwndLV: HWND): UINT;
  4292.  
  4293. const
  4294.   {$EXTERNALSYM LVM_GETITEMSPACING}
  4295.   LVM_GETITEMSPACING      = LVM_FIRST + 51;
  4296.  
  4297. {$EXTERNALSYM ListView_GetItemSpacing}
  4298. function ListView_GetItemSpacing(hwndLV: HWND; fSmall: Integer): Longint;
  4299.  
  4300. const
  4301.   {$EXTERNALSYM LVM_GETISEARCHSTRINGA}
  4302.   LVM_GETISEARCHSTRINGA    = LVM_FIRST + 52;
  4303.   {$EXTERNALSYM LVM_GETISEARCHSTRINGW}
  4304.   LVM_GETISEARCHSTRINGW    = LVM_FIRST + 117;
  4305.  
  4306.  
  4307.  
  4308.  
  4309.   {$EXTERNALSYM LVM_GETISEARCHSTRING}
  4310.   LVM_GETISEARCHSTRING    = LVM_GETISEARCHSTRINGA;
  4311.  
  4312.  
  4313. {$EXTERNALSYM ListView_GetISearchString}
  4314. function ListView_GetISearchString(hwndLV: HWND; lpsz: PChar): Bool;
  4315. {$EXTERNALSYM ListView_GetISearchStringA}
  4316. function ListView_GetISearchStringA(hwndLV: HWND; lpsz: PAnsiChar): Bool;
  4317. {$EXTERNALSYM ListView_GetISearchStringW}
  4318. function ListView_GetISearchStringW(hwndLV: HWND; lpsz: PWideChar): Bool;
  4319.  
  4320. const
  4321.   {$EXTERNALSYM LVM_SETICONSPACING}
  4322.   LVM_SETICONSPACING      = LVM_FIRST + 53;
  4323.  
  4324. // -1 for cx and cy means we'll use the default (system settings)
  4325. // 0 for cx or cy means use the current setting (allows you to change just one param)
  4326. {$EXTERNALSYM ListView_SetIconSpacing}
  4327. function ListView_SetIconSpacing(hwndLV: HWND; cx, cy: Word): DWORD;
  4328.  
  4329. const
  4330.   {$EXTERNALSYM LVM_SETEXTENDEDLISTVIEWSTYLE}
  4331.   LVM_SETEXTENDEDLISTVIEWSTYLE = LVM_FIRST + 54;
  4332.  
  4333. {$EXTERNALSYM ListView_SetExtendedListViewStyle}
  4334. function ListView_SetExtendedListViewStyle(hwndLV: HWND; dw: DWORD): BOOL;
  4335.  
  4336. const
  4337.   {$EXTERNALSYM LVM_GETEXTENDEDLISTVIEWSTYLE}
  4338.   LVM_GETEXTENDEDLISTVIEWSTYLE = LVM_FIRST + 55;
  4339.  
  4340. {$EXTERNALSYM ListView_GetExtendedListViewStyle}
  4341. function ListView_GetExtendedListViewStyle(hwndLV: HWND): DWORD;
  4342.  
  4343. const
  4344.   {$EXTERNALSYM LVM_GETSUBITEMRECT}
  4345.   LVM_GETSUBITEMRECT      = LVM_FIRST + 56;
  4346.  
  4347. {$EXTERNALSYM ListView_GetSubItemRect}
  4348. function ListView_GetSubItemRect(hwndLV: HWND; iItem, iSubItem: Integer;
  4349.   code: DWORD; prc: PRect): BOOL;
  4350.  
  4351. const
  4352.   {$EXTERNALSYM LVM_SUBITEMHITTEST}
  4353.   LVM_SUBITEMHITTEST      = LVM_FIRST + 57;
  4354.  
  4355. {$EXTERNALSYM ListView_SubItemHitTest}
  4356. function ListView_SubItemHitTest(hwndLV: HWND; plvhti: PLVHitTestInfo): Integer;
  4357.  
  4358. const
  4359.   {$EXTERNALSYM LVM_SETCOLUMNORDERARRAY}
  4360.   LVM_SETCOLUMNORDERARRAY = LVM_FIRST + 58;
  4361.  
  4362. {$EXTERNALSYM ListView_SetColumnOrderArray}
  4363. function ListView_SetColumnOrderArray(hwndLV: HWND; iCount: Integer;
  4364.   pi: PInteger): BOOL;
  4365.  
  4366. const
  4367.   {$EXTERNALSYM LVM_GETCOLUMNORDERARRAY}
  4368.   LVM_GETCOLUMNORDERARRAY = LVM_FIRST + 59;
  4369.  
  4370. {$EXTERNALSYM ListView_GetColumnOrderArray}
  4371. function ListView_GetColumnOrderArray(hwndLV: HWND; iCount: Integer;
  4372.   pi: PInteger): BOOL;
  4373.  
  4374. const
  4375.   {$EXTERNALSYM LVM_SETHOTITEM}
  4376.   LVM_SETHOTITEM  = LVM_FIRST + 60;
  4377.  
  4378. {$EXTERNALSYM ListView_SetHotItem}
  4379. function ListView_SetHotItem(hwndLV: HWND; i: Integer): Integer;
  4380.  
  4381. const
  4382.   {$EXTERNALSYM LVM_GETHOTITEM}
  4383.   LVM_GETHOTITEM  = LVM_FIRST + 61;
  4384.  
  4385. {$EXTERNALSYM ListView_GetHotItem}
  4386. function ListView_GetHotItem(hwndLV: HWND): Integer;
  4387.  
  4388. const
  4389.   {$EXTERNALSYM LVM_SETHOTCURSOR}
  4390.   LVM_SETHOTCURSOR  = LVM_FIRST + 62;
  4391.  
  4392. {$EXTERNALSYM ListView_SetHotCursor}
  4393. function ListView_SetHotCursor(hwndLV: HWND; hcur: HCURSOR): HCURSOR;
  4394.  
  4395. const
  4396.   {$EXTERNALSYM LVM_GETHOTCURSOR}
  4397.   LVM_GETHOTCURSOR  = LVM_FIRST + 63;
  4398.  
  4399. {$EXTERNALSYM ListView_GetHotCursor}
  4400. function ListView_GetHotCursor(hwndLV: HWND): HCURSOR;
  4401.  
  4402. const
  4403.   {$EXTERNALSYM LVM_APPROXIMATEVIEWRECT}
  4404.   LVM_APPROXIMATEVIEWRECT = LVM_FIRST + 64;
  4405.  
  4406. {$EXTERNALSYM ListView_ApproximateViewRect}
  4407. function ListView_ApproximateViewRect(hwndLV: HWND; iWidth, iHeight: Word;
  4408.   iCount: Integer): DWORD;
  4409.  
  4410. const
  4411.   {$EXTERNALSYM LV_MAX_WORKAREAS}
  4412.   LV_MAX_WORKAREAS        = 16;
  4413.   {$EXTERNALSYM LVM_SETWORKAREA}
  4414.   LVM_SETWORKAREA         = LVM_FIRST + 65;
  4415.  
  4416. {$EXTERNALSYM ListView_SetWorkAreas}
  4417. function ListView_SetWorkAreas(hwndLV: HWND; nWorkAreas: Integer; prc: PRect): BOOL;
  4418.  
  4419. const
  4420.   {$EXTERNALSYM LVM_GETSELECTIONMARK}
  4421.   LVM_GETSELECTIONMARK    = LVM_FIRST + 66;
  4422.  
  4423. {$EXTERNALSYM ListView_GetSelectionMark}
  4424. function ListView_GetSelectionMark(hwnd: HWND): Integer;
  4425.  
  4426. const
  4427.   {$EXTERNALSYM LVM_SETSELECTIONMARK}
  4428.   LVM_SETSELECTIONMARK    = LVM_FIRST + 67;
  4429.  
  4430. {$EXTERNALSYM ListView_SetSelectionMark}
  4431. function ListView_SetSelectionMark(hwnd: HWND; i: Integer): Integer;
  4432.  
  4433. const
  4434.   {$EXTERNALSYM LVM_GETWORKAREAS}
  4435.   LVM_GETWORKAREAS        = LVM_FIRST + 70;
  4436.  
  4437. {$EXTERNALSYM ListView_GetWorkAreas}
  4438. function ListView_GetWorkAreas(hwnd: HWND; nWorkAreas: Integer; prc: PRect): BOOL;
  4439.  
  4440. const
  4441.   {$EXTERNALSYM LVM_SETHOVERTIME}
  4442.   LVM_SETHOVERTIME        = LVM_FIRST + 71;
  4443.  
  4444. {$EXTERNALSYM ListView_SetHoverTime}
  4445. function ListView_SetHoverTime(hwndLV: HWND; dwHoverTimeMs: DWORD): DWORD;
  4446.  
  4447. const
  4448.   {$EXTERNALSYM LVM_GETHOVERTIME}
  4449.   LVM_GETHOVERTIME        = LVM_FIRST + 72;
  4450.  
  4451. {$EXTERNALSYM ListView_GetHoverTime}
  4452. function ListView_GetHoverTime(hwndLV: HWND): Integer;
  4453.  
  4454. const
  4455.   {$EXTERNALSYM LVM_GETNUMBEROFWORKAREAS}
  4456.   LVM_GETNUMBEROFWORKAREAS  = LVM_FIRST + 73;
  4457.  
  4458. {$EXTERNALSYM ListView_GetNumberOfWorkAreas}
  4459. function ListView_GetNumberOfWorkAreas(hwnd: HWND; pnWorkAreas: PInteger): Integer;
  4460.  
  4461. const
  4462.   {$EXTERNALSYM LVM_SETTOOLTIPS}
  4463.   LVM_SETTOOLTIPS       = LVM_FIRST + 74;
  4464.  
  4465. {$EXTERNALSYM ListView_SetToolTips}
  4466. function ListView_SetToolTips(hwndLV: HWND; hwndNewHwnd: HWND): HWND;
  4467.  
  4468. const
  4469.   {$EXTERNALSYM LVM_GETTOOLTIPS}
  4470.   LVM_GETTOOLTIPS       = LVM_FIRST + 78;
  4471.  
  4472. {$EXTERNALSYM ListView_GetToolTips}
  4473. function ListView_GetToolTips(hwndLV: HWND): HWND;
  4474.  
  4475. type
  4476. {$EXTERNALSYM tagLVBKIMAGEA}
  4477.   tagLVBKIMAGEA = packed record
  4478.     ulFlags: ULONG;              // LVBKIF_*
  4479.     hbm: HBITMAP;
  4480.     pszImage: PAnsiChar;
  4481.     cchImageMax: UINT;
  4482.     xOffsetPercent: Integer;
  4483.     yOffsetPercent: Integer;
  4484.   end;
  4485. {$EXTERNALSYM tagLVBKIMAGEW}
  4486.   tagLVBKIMAGEW = packed record
  4487.     ulFlags: ULONG;              // LVBKIF_*
  4488.     hbm: HBITMAP;
  4489.     pszImage: PWideChar;
  4490.     cchImageMax: UINT;
  4491.     xOffsetPercent: Integer;
  4492.     yOffsetPercent: Integer;
  4493.   end;
  4494.   {$EXTERNALSYM tagLVBKIMAGE}
  4495.   tagLVBKIMAGE = tagLVBKIMAGEA;
  4496.   PLVBKImageA = ^TLVBKImageA;
  4497.   PLVBKImageW = ^TLVBKImageW;
  4498.   PLVBKImage = PLVBKImageA;
  4499.   TLVBKImageA = tagLVBKIMAGEA;
  4500.   TLVBKImageW = tagLVBKIMAGEW;
  4501.   TLVBKImage = TLVBKImageA;
  4502.  
  4503. const
  4504.   {$EXTERNALSYM LVBKIF_SOURCE_NONE}
  4505.   LVBKIF_SOURCE_NONE      = $00000000;
  4506.   {$EXTERNALSYM LVBKIF_SOURCE_HBITMAP}
  4507.   LVBKIF_SOURCE_HBITMAP   = $00000001;
  4508.   {$EXTERNALSYM LVBKIF_SOURCE_URL}
  4509.   LVBKIF_SOURCE_URL       = $00000002;
  4510.   {$EXTERNALSYM LVBKIF_SOURCE_MASK}
  4511.   LVBKIF_SOURCE_MASK      = $00000003;
  4512.   {$EXTERNALSYM LVBKIF_STYLE_NORMAL}
  4513.   LVBKIF_STYLE_NORMAL     = $00000000;
  4514.   {$EXTERNALSYM LVBKIF_STYLE_TILE}
  4515.   LVBKIF_STYLE_TILE       = $00000010;
  4516.   {$EXTERNALSYM LVBKIF_STYLE_MASK}
  4517.   LVBKIF_STYLE_MASK       = $00000010;
  4518.  
  4519.   {$EXTERNALSYM LVM_SETBKIMAGEA}
  4520.   LVM_SETBKIMAGEA         = LVM_FIRST + 68;
  4521.   {$EXTERNALSYM LVM_SETBKIMAGEW}
  4522.   LVM_SETBKIMAGEW         = LVM_FIRST + 138;
  4523.   {$EXTERNALSYM LVM_GETBKIMAGEA}
  4524.   LVM_GETBKIMAGEA         = LVM_FIRST + 69;
  4525.   {$EXTERNALSYM LVM_GETBKIMAGEW}
  4526.   LVM_GETBKIMAGEW         = LVM_FIRST + 139;
  4527.  
  4528.  
  4529.  
  4530.  
  4531.  
  4532.  
  4533.  
  4534.   {$EXTERNALSYM LVM_SETBKIMAGE}
  4535.   LVM_SETBKIMAGE = LVM_SETBKIMAGEA;
  4536.   {$EXTERNALSYM LVM_GETBKIMAGE}
  4537.   LVM_GETBKIMAGE = LVM_GETBKIMAGEA;
  4538.  
  4539.  
  4540. {$EXTERNALSYM ListView_SetBkImage}
  4541. function ListView_SetBkImage(hwnd: HWND; plvbki: PLVBKImage): BOOL;
  4542.  
  4543. {$EXTERNALSYM ListView_GetBkImage}
  4544. function ListView_GetBkImage(hwnd: HWND; plvbki: PLVBKImage): BOOL;
  4545.  
  4546. type
  4547.   {$EXTERNALSYM tagNMLISTVIEW}
  4548.   tagNMLISTVIEW = packed record
  4549.     hdr: TNMHDR;
  4550.     iItem: Integer;
  4551.     iSubItem: Integer;
  4552.     uNewState: UINT;
  4553.     uOldState: UINT;
  4554.     uChanged: UINT;
  4555.     ptAction: TPoint;
  4556.     lParam: LPARAM;
  4557.   end;
  4558.   {$EXTERNALSYM _NM_LISTVIEW}
  4559.   _NM_LISTVIEW = tagNMLISTVIEW;
  4560.   {$EXTERNALSYM NM_LISTVIEW}
  4561.   NM_LISTVIEW = tagNMLISTVIEW;
  4562.   PNMListView = ^TNMListView;
  4563.   TNMListView = tagNMLISTVIEW;
  4564.  
  4565.   // NMITEMACTIVATE is used instead of NMLISTVIEW in IE >= 0x400
  4566.   // therefore all the fields are the same except for extra uKeyFlags
  4567.   // they are used to store key flags at the time of the single click with
  4568.   // delayed activation - because by the time the timer goes off a user may
  4569.   // not hold the keys (shift, ctrl) any more
  4570.   {$EXTERNALSYM tagNMITEMACTIVATE}
  4571.   tagNMITEMACTIVATE = packed record
  4572.     hdr: TNMHdr;
  4573.     iItem: Integer;
  4574.     iSubItem: Integer;
  4575.     uNewState: UINT;
  4576.     uOldState: UINT;
  4577.     uChanged: UINT;
  4578.     ptAction: TPoint;
  4579.     lParam: LPARAM;
  4580.     uKeyFlags: UINT;
  4581.   end;
  4582.   PNMItemActivate = ^TNMItemActivate;
  4583.   TNMItemActivate = tagNMITEMACTIVATE;
  4584.  
  4585. const
  4586.   // key flags stored in uKeyFlags
  4587.   {$EXTERNALSYM LVKF_ALT}
  4588.   LVKF_ALT       = $0001;
  4589.   {$EXTERNALSYM LVKF_CONTROL}
  4590.   LVKF_CONTROL   = $0002;
  4591.   {$EXTERNALSYM LVKF_SHIFT}
  4592.   LVKF_SHIFT     = $0004;
  4593.  
  4594. type
  4595.   {$EXTERNALSYM tagNMLVCUSTOMDRAW}
  4596.   tagNMLVCUSTOMDRAW = packed record
  4597.     nmcd: TNMCustomDraw;
  4598.     clrText: COLORREF;
  4599.     clrTextBk: COLORREF;
  4600.     iSubItem: Integer;
  4601.   end;
  4602.   PNMLVCustomDraw = ^TNMLVCustomDraw;
  4603.   TNMLVCustomDraw = tagNMLVCUSTOMDRAW;
  4604.  
  4605.   {$EXTERNALSYM tagNMLVCACHEHINT}
  4606.   tagNMLVCACHEHINT = packed record
  4607.     hdr: TNMHDR;
  4608.     iFrom: Integer;
  4609.     iTo: Integer;
  4610.   end;
  4611.   PNMLVCacheHint = ^TNMLVCacheHint;
  4612.   TNMLVCacheHint = tagNMLVCACHEHINT;
  4613.   PNMCacheHint = ^TNMCacheHint;
  4614.   TNMCacheHint = tagNMLVCACHEHINT;
  4615.  
  4616.   {$EXTERNALSYM tagNMLVFINDITEMA} // WIN2K
  4617.   tagNMLVFINDITEMA = packed record // WIN2K
  4618.     hdr: TNMHdr;
  4619.     iStart: Integer;
  4620.     lvfi: TLVFindInfo;
  4621.   end;
  4622.   PNMLVFinditem = ^TNMLVFinditem;
  4623.   TNMLVFinditem = tagNMLVFINDITEMA; // WIN2K
  4624.   PNMFinditem = ^TNMFinditem;
  4625.   TNMFinditem = tagNMLVFINDITEMA; // WIN2K
  4626.  
  4627.   {$EXTERNALSYM tagNMLVODSTATECHANGE}
  4628.   tagNMLVODSTATECHANGE = packed record
  4629.     hdr: TNMHdr;
  4630.     iFrom: Integer;
  4631.     iTo: Integer;
  4632.     uNewState: UINT;
  4633.     uOldState: UINT;
  4634.   end;
  4635.   PNMLVODStateChange = ^TNMLVODStateChange;
  4636.   TNMLVODStateChange = tagNMLVODSTATECHANGE;
  4637.  
  4638. const
  4639.   {$EXTERNALSYM LVN_ITEMCHANGING}
  4640.   LVN_ITEMCHANGING        = LVN_FIRST-0;
  4641.   {$EXTERNALSYM LVN_ITEMCHANGED}
  4642.   LVN_ITEMCHANGED         = LVN_FIRST-1;
  4643.   {$EXTERNALSYM LVN_INSERTITEM}
  4644.   LVN_INSERTITEM          = LVN_FIRST-2;
  4645.   {$EXTERNALSYM LVN_DELETEITEM}
  4646.   LVN_DELETEITEM          = LVN_FIRST-3;
  4647.   {$EXTERNALSYM LVN_DELETEALLITEMS}
  4648.   LVN_DELETEALLITEMS      = LVN_FIRST-4;
  4649.   {$EXTERNALSYM LVN_COLUMNCLICK}
  4650.   LVN_COLUMNCLICK         = LVN_FIRST-8;
  4651.   {$EXTERNALSYM LVN_BEGINDRAG}
  4652.   LVN_BEGINDRAG           = LVN_FIRST-9;
  4653.   {$EXTERNALSYM LVN_BEGINRDRAG}
  4654.   LVN_BEGINRDRAG          = LVN_FIRST-11;
  4655.  
  4656.   {$EXTERNALSYM LVN_ODCACHEHINT}
  4657.   LVN_ODCACHEHINT         = LVN_FIRST-13;
  4658.   {$EXTERNALSYM LVN_ODFINDITEMA}
  4659.   LVN_ODFINDITEMA         = LVN_FIRST-52;
  4660.   {$EXTERNALSYM LVN_ODFINDITEMW}
  4661.   LVN_ODFINDITEMW         = LVN_FIRST-79;
  4662.  
  4663.   {$EXTERNALSYM LVN_ITEMACTIVATE}
  4664.   LVN_ITEMACTIVATE        = LVN_FIRST-14;
  4665.   {$EXTERNALSYM LVN_ODSTATECHANGED}
  4666.   LVN_ODSTATECHANGED      = LVN_FIRST-15;
  4667.  
  4668.  
  4669.  
  4670.  
  4671.  
  4672.   {$EXTERNALSYM LVN_ODFINDITEM}
  4673.   LVN_ODFINDITEM          = LVN_ODFINDITEMA; 
  4674.  
  4675.  
  4676.   {$EXTERNALSYM LVN_BEGINLABELEDITA}
  4677.   LVN_BEGINLABELEDITA      = LVN_FIRST-5;
  4678.   {$EXTERNALSYM LVN_ENDLABELEDITA}
  4679.   LVN_ENDLABELEDITA        = LVN_FIRST-6;
  4680.   {$EXTERNALSYM LVN_BEGINLABELEDITW}
  4681.   LVN_BEGINLABELEDITW      = LVN_FIRST-75;
  4682.   {$EXTERNALSYM LVN_ENDLABELEDITW}
  4683.   LVN_ENDLABELEDITW        = LVN_FIRST-76;
  4684.  
  4685.  
  4686.  
  4687.  
  4688.  
  4689.  
  4690.   {$EXTERNALSYM LVN_BEGINLABELEDIT}
  4691.   LVN_BEGINLABELEDIT      = LVN_BEGINLABELEDITA;
  4692.   {$EXTERNALSYM LVN_ENDLABELEDIT}
  4693.   LVN_ENDLABELEDIT        = LVN_ENDLABELEDITA;
  4694.  
  4695.  
  4696.   {$EXTERNALSYM LVN_HOTTRACK}
  4697.   LVN_HOTTRACK            = LVN_FIRST-21;
  4698.   
  4699.   {$EXTERNALSYM LVN_GETDISPINFOA}
  4700.   LVN_GETDISPINFOA        = LVN_FIRST-50;
  4701.   {$EXTERNALSYM LVN_SETDISPINFOA}
  4702.   LVN_SETDISPINFOA        = LVN_FIRST-51;
  4703.   {$EXTERNALSYM LVN_GETDISPINFOW}
  4704.   LVN_GETDISPINFOW        = LVN_FIRST-77;
  4705.   {$EXTERNALSYM LVN_SETDISPINFOW}
  4706.   LVN_SETDISPINFOW        = LVN_FIRST-78;
  4707.  
  4708.  
  4709.  
  4710.  
  4711.  
  4712.  
  4713.   {$EXTERNALSYM LVN_GETDISPINFO}
  4714.   LVN_GETDISPINFO        = LVN_GETDISPINFOA;
  4715.   {$EXTERNALSYM LVN_SETDISPINFO}
  4716.   LVN_SETDISPINFO        = LVN_SETDISPINFOA;
  4717.  
  4718.  
  4719.   {$EXTERNALSYM LVIF_DI_SETITEM}
  4720.   LVIF_DI_SETITEM         = $1000;
  4721.  
  4722. type
  4723.   PLVDispInfoA = ^TLVDispInfoA;
  4724.   PLVDispInfoW = ^TLVDispInfoW;
  4725.   PLVDispInfo = PLVDispInfoA;
  4726.   {$EXTERNALSYM tagLVDISPINFO}
  4727.   tagLVDISPINFO = packed record
  4728.     hdr: TNMHDR;
  4729.     item: TLVItemA;
  4730.   end;
  4731.   {$EXTERNALSYM _LV_DISPINFO}
  4732.   _LV_DISPINFO = tagLVDISPINFO;
  4733.   {$EXTERNALSYM tagLVDISPINFOW}
  4734.   tagLVDISPINFOW = packed record
  4735.     hdr: TNMHDR;
  4736.     item: TLVItemW;
  4737.   end;
  4738.   {$EXTERNALSYM _LV_DISPINFOW}
  4739.   _LV_DISPINFOW = tagLVDISPINFOW;
  4740.   TLVDispInfoA = tagLVDISPINFO;
  4741.   TLVDispInfoW = tagLVDISPINFOW;
  4742.   TLVDispInfo = TLVDispInfoA;
  4743.   {$EXTERNALSYM LV_DISPINFOA}
  4744.   LV_DISPINFOA = tagLVDISPINFO;
  4745.   {$EXTERNALSYM LV_DISPINFOW}
  4746.   LV_DISPINFOW = tagLVDISPINFOW;
  4747.   {$EXTERNALSYM LV_DISPINFO}
  4748.   LV_DISPINFO = LV_DISPINFOA;
  4749.  
  4750. const
  4751.   {$EXTERNALSYM LVN_KEYDOWN}
  4752.   LVN_KEYDOWN             = LVN_FIRST-55;
  4753.  
  4754. type
  4755.   PLVKeyDown = ^TLVKeyDown;
  4756.   {$EXTERNALSYM tagLVKEYDOWN}
  4757.   tagLVKEYDOWN = packed record
  4758.     hdr: TNMHDR;
  4759.     wVKey: Word;
  4760.     flags: UINT;
  4761.   end;
  4762.   {$EXTERNALSYM _LV_KEYDOWN}
  4763.   _LV_KEYDOWN = tagLVKEYDOWN;
  4764.   TLVKeyDown = tagLVKEYDOWN;
  4765.   {$EXTERNALSYM LV_KEYDOWN}
  4766.   LV_KEYDOWN = tagLVKEYDOWN;
  4767.  
  4768. const
  4769.   {$EXTERNALSYM LVN_MARQUEEBEGIN}
  4770.   LVN_MARQUEEBEGIN        = LVN_FIRST-56;
  4771.  
  4772. type
  4773.   {$EXTERNALSYM tagNMLVGETINFOTIPA}
  4774.   tagNMLVGETINFOTIPA = packed record
  4775.     hdr: TNMHdr;
  4776.     dwFlags: DWORD;
  4777.     pszText: PAnsiChar;
  4778.     cchTextMax: Integer;
  4779.     iItem: Integer;
  4780.     iSubItem: Integer;
  4781.     lParam: LPARAM;
  4782.   end;
  4783.   {$EXTERNALSYM tagNMLVGETINFOTIPW}
  4784.   tagNMLVGETINFOTIPW = packed record
  4785.     hdr: TNMHdr;
  4786.     dwFlags: DWORD;
  4787.     pszText: PWideChar;
  4788.     cchTextMax: Integer;
  4789.     iItem: Integer;
  4790.     iSubItem: Integer;
  4791.     lParam: LPARAM;
  4792.   end;
  4793.   {$EXTERNALSYM tagNMLVGETINFOTIP}
  4794.   tagNMLVGETINFOTIP = tagNMLVGETINFOTIPA;
  4795.   PNMLVGetInfoTipA = ^TNMLVGetInfoTipA;
  4796.   PNMLVGetInfoTipW = ^TNMLVGetInfoTipW;
  4797.   PNMLVGetInfoTip = PNMLVGetInfoTipA;
  4798.   TNMLVGetInfoTipA = tagNMLVGETINFOTIPA;
  4799.   TNMLVGetInfoTipW = tagNMLVGETINFOTIPW;
  4800.   TNMLVGetInfoTip = TNMLVGetInfoTipA;
  4801.  
  4802. const
  4803.   // NMLVGETINFOTIPA.dwFlag values
  4804.   {$EXTERNALSYM LVGIT_UNFOLDED}
  4805.   LVGIT_UNFOLDED  = $0001;
  4806.  
  4807.   {$EXTERNALSYM LVN_GETINFOTIPA}
  4808.   LVN_GETINFOTIPA          = LVN_FIRST-57;
  4809.   {$EXTERNALSYM LVN_GETINFOTIPW}
  4810.   LVN_GETINFOTIPW          = LVN_FIRST-58;
  4811.  
  4812.  
  4813.  
  4814.  
  4815.  
  4816.   {$EXTERNALSYM LVN_GETINFOTIP}
  4817.   LVN_GETINFOTIP          = LVN_GETINFOTIPA;
  4818.  
  4819.  
  4820. { ====== TREEVIEW CONTROL =================== }
  4821.  
  4822. const
  4823.   {$EXTERNALSYM WC_TREEVIEW}
  4824.   WC_TREEVIEW = 'SysTreeView32';
  4825.  
  4826. const
  4827.   {$EXTERNALSYM TVS_HASBUTTONS}
  4828.   TVS_HASBUTTONS          = $0001;
  4829.   {$EXTERNALSYM TVS_HASLINES}
  4830.   TVS_HASLINES            = $0002;
  4831.   {$EXTERNALSYM TVS_LINESATROOT}
  4832.   TVS_LINESATROOT         = $0004;
  4833.   {$EXTERNALSYM TVS_EDITLABELS}
  4834.   TVS_EDITLABELS          = $0008;
  4835.   {$EXTERNALSYM TVS_DISABLEDRAGDROP}
  4836.   TVS_DISABLEDRAGDROP     = $0010;
  4837.   {$EXTERNALSYM TVS_SHOWSELALWAYS}
  4838.   TVS_SHOWSELALWAYS       = $0020;
  4839.   {$EXTERNALSYM TVS_RTLREADING}
  4840.   TVS_RTLREADING          = $0040;
  4841.   {$EXTERNALSYM TVS_NOTOOLTIPS}
  4842.   TVS_NOTOOLTIPS          = $0080;
  4843.   {$EXTERNALSYM TVS_CHECKBOXES}
  4844.   TVS_CHECKBOXES          = $0100;
  4845.   {$EXTERNALSYM TVS_TRACKSELECT}
  4846.   TVS_TRACKSELECT         = $0200;
  4847.   {$EXTERNALSYM TVS_SINGLEEXPAND}
  4848.   TVS_SINGLEEXPAND        = $0400;
  4849.   {$EXTERNALSYM TVS_INFOTIP}
  4850.   TVS_INFOTIP             = $0800;
  4851.   {$EXTERNALSYM TVS_FULLROWSELECT}
  4852.   TVS_FULLROWSELECT       = $1000;
  4853.   {$EXTERNALSYM TVS_NOSCROLL}
  4854.   TVS_NOSCROLL            = $2000;
  4855.   {$EXTERNALSYM TVS_NONEVENHEIGHT}
  4856.   TVS_NONEVENHEIGHT       = $4000;
  4857.  
  4858. type
  4859.   {$EXTERNALSYM HTREEITEM}
  4860.   HTREEITEM = ^_TREEITEM;
  4861.   {$EXTERNALSYM _TREEITEM}
  4862.   _TREEITEM = packed record
  4863.   end;
  4864.  
  4865. const
  4866.   {$EXTERNALSYM TVIF_TEXT}
  4867.   TVIF_TEXT               = $0001;
  4868.   {$EXTERNALSYM TVIF_IMAGE}
  4869.   TVIF_IMAGE              = $0002;
  4870.   {$EXTERNALSYM TVIF_PARAM}
  4871.   TVIF_PARAM              = $0004;
  4872.   {$EXTERNALSYM TVIF_STATE}
  4873.   TVIF_STATE              = $0008;
  4874.   {$EXTERNALSYM TVIF_HANDLE}
  4875.   TVIF_HANDLE             = $0010;
  4876.   {$EXTERNALSYM TVIF_SELECTEDIMAGE}
  4877.   TVIF_SELECTEDIMAGE      = $0020;
  4878.   {$EXTERNALSYM TVIF_CHILDREN}
  4879.   TVIF_CHILDREN           = $0040;
  4880.   {$EXTERNALSYM TVIF_INTEGRAL}
  4881.   TVIF_INTEGRAL           = $0080;
  4882.  
  4883.   {$EXTERNALSYM TVIS_FOCUSED}
  4884.   TVIS_FOCUSED            = $0001;
  4885.   {$EXTERNALSYM TVIS_SELECTED}
  4886.   TVIS_SELECTED           = $0002;
  4887.   {$EXTERNALSYM TVIS_CUT}
  4888.   TVIS_CUT                = $0004;
  4889.   {$EXTERNALSYM TVIS_DROPHILITED}
  4890.   TVIS_DROPHILITED        = $0008;
  4891.   {$EXTERNALSYM TVIS_BOLD}
  4892.   TVIS_BOLD               = $0010;
  4893.   {$EXTERNALSYM TVIS_EXPANDED}
  4894.   TVIS_EXPANDED           = $0020;
  4895.   {$EXTERNALSYM TVIS_EXPANDEDONCE}
  4896.   TVIS_EXPANDEDONCE       = $0040;
  4897.   {$EXTERNALSYM TVIS_EXPANDPARTIAL}
  4898.   TVIS_EXPANDPARTIAL      = $0080;
  4899.  
  4900.   {$EXTERNALSYM TVIS_OVERLAYMASK}
  4901.   TVIS_OVERLAYMASK        = $0F00;
  4902.   {$EXTERNALSYM TVIS_STATEIMAGEMASK}
  4903.   TVIS_STATEIMAGEMASK     = $F000;
  4904.   {$EXTERNALSYM TVIS_USERMASK}
  4905.   TVIS_USERMASK           = $F000;
  4906.  
  4907.  
  4908. const
  4909.   {$EXTERNALSYM I_CHILDRENCALLBACK}
  4910.   I_CHILDRENCALLBACK  = -1;
  4911.  
  4912. type
  4913.   PTVItemA = ^TTVItemA;
  4914.   PTVItemW = ^TTVItemW;
  4915.   PTVItem = PTVItemA;
  4916.   {$EXTERNALSYM tagTVITEMA}
  4917.   tagTVITEMA = packed record
  4918.     mask: UINT;
  4919.     hItem: HTreeItem;
  4920.     state: UINT;
  4921.     stateMask: UINT;
  4922.     pszText: PAnsiChar;
  4923.     cchTextMax: Integer;
  4924.     iImage: Integer;
  4925.     iSelectedImage: Integer;
  4926.     cChildren: Integer;
  4927.     lParam: LPARAM;
  4928.   end;
  4929.   {$EXTERNALSYM tagTVITEMW}
  4930.   tagTVITEMW = packed record
  4931.     mask: UINT;
  4932.     hItem: HTreeItem;
  4933.     state: UINT;
  4934.     stateMask: UINT;
  4935.     pszText: PWideChar;
  4936.     cchTextMax: Integer;
  4937.     iImage: Integer;
  4938.     iSelectedImage: Integer;
  4939.     cChildren: Integer;
  4940.     lParam: LPARAM;
  4941.   end;
  4942.   {$EXTERNALSYM tagTVITEM}
  4943.   tagTVITEM = tagTVITEMA;
  4944.   {$EXTERNALSYM _TV_ITEMA}
  4945.   _TV_ITEMA = tagTVITEMA;
  4946.   {$EXTERNALSYM _TV_ITEMW}
  4947.   _TV_ITEMW = tagTVITEMW;
  4948.   {$EXTERNALSYM _TV_ITEM}
  4949.   _TV_ITEM = _TV_ITEMA;
  4950.   TTVItemA = tagTVITEMA;
  4951.   TTVItemW = tagTVITEMW;
  4952.   TTVItem = TTVItemA;
  4953.   {$EXTERNALSYM TV_ITEMA}
  4954.   TV_ITEMA = tagTVITEMA;
  4955.   {$EXTERNALSYM TV_ITEMW}
  4956.   TV_ITEMW = tagTVITEMW;
  4957.   {$EXTERNALSYM TV_ITEM}
  4958.   TV_ITEM = TV_ITEMA;
  4959.  
  4960.   // only used for Get and Set messages.  no notifies
  4961.   {$EXTERNALSYM tagTVITEMEXA}
  4962.   tagTVITEMEXA = packed record
  4963.     mask: UINT;
  4964.     hItem: HTREEITEM;
  4965.     state: UINT;
  4966.     stateMask: UINT;
  4967.     pszText: PAnsiChar;
  4968.     cchTextMax: Integer;
  4969.     iImage: Integer;
  4970.     iSelectedImage: Integer;
  4971.     cChildren: Integer;
  4972.     lParam: LPARAM;
  4973.     iIntegral: Integer;
  4974.   end;
  4975.   {$EXTERNALSYM tagTVITEMEXW}
  4976.   tagTVITEMEXW = packed record
  4977.     mask: UINT;
  4978.     hItem: HTREEITEM;
  4979.     state: UINT;
  4980.     stateMask: UINT;
  4981.     pszText: PWideChar;
  4982.     cchTextMax: Integer;
  4983.     iImage: Integer;
  4984.     iSelectedImage: Integer;
  4985.     cChildren: Integer;
  4986.     lParam: LPARAM;
  4987.     iIntegral: Integer;
  4988.   end;
  4989.   {$EXTERNALSYM tagTVITEMEX}
  4990.   tagTVITEMEX = tagTVITEMEXA;
  4991.   PTVItemExA = ^TTVItemExA;
  4992.   PTVItemExW = ^TTVItemExW;
  4993.   PTVItemEx = PTVItemExA;
  4994.   TTVItemExA = tagTVITEMEXA;
  4995.   TTVItemExW = tagTVITEMEXW;
  4996.   TTVItemEx = TTVItemExA;
  4997.  
  4998. const
  4999.   {$EXTERNALSYM TVI_ROOT}
  5000.   TVI_ROOT                = HTreeItem($FFFF0000);
  5001.   {$EXTERNALSYM TVI_FIRST}
  5002.   TVI_FIRST               = HTreeItem($FFFF0001);
  5003.   {$EXTERNALSYM TVI_LAST}
  5004.   TVI_LAST                = HTreeItem($FFFF0002);
  5005.   {$EXTERNALSYM TVI_SORT}
  5006.   TVI_SORT                = HTreeItem($FFFF0003);
  5007.  
  5008. type
  5009.   PTVInsertStructA = ^TTVInsertStructA;
  5010.   PTVInsertStructW = ^TTVInsertStructW;
  5011.   PTVInsertStruct = PTVInsertStructA;
  5012.   {$EXTERNALSYM tagTVINSERTSTRUCTA}
  5013.   tagTVINSERTSTRUCTA = packed record
  5014.     hParent: HTreeItem;
  5015.     hInsertAfter: HTreeItem;
  5016.     case Integer of
  5017.       0: (itemex: TTVItemExA);
  5018.       1: (item: TTVItemA);
  5019.   end;
  5020.   {$EXTERNALSYM tagTVINSERTSTRUCTW}
  5021.   tagTVINSERTSTRUCTW = packed record
  5022.     hParent: HTreeItem;
  5023.     hInsertAfter: HTreeItem;
  5024.     case Integer of
  5025.       0: (itemex: TTVItemExW);
  5026.       1: (item: TTVItemW);
  5027.   end;
  5028.   {$EXTERNALSYM tagTVINSERTSTRUCT}
  5029.   tagTVINSERTSTRUCT = tagTVINSERTSTRUCTA;
  5030.   {$EXTERNALSYM _TV_INSERTSTRUCTA}
  5031.   _TV_INSERTSTRUCTA = tagTVINSERTSTRUCTA;
  5032.   {$EXTERNALSYM _TV_INSERTSTRUCTW}
  5033.   _TV_INSERTSTRUCTW = tagTVINSERTSTRUCTW;
  5034.   {$EXTERNALSYM _TV_INSERTSTRUCT}
  5035.   _TV_INSERTSTRUCT = _TV_INSERTSTRUCTA;
  5036.   TTVInsertStructA = tagTVINSERTSTRUCTA;
  5037.   TTVInsertStructW = tagTVINSERTSTRUCTW;
  5038.   TTVInsertStruct = TTVInsertStructA;
  5039.   {$EXTERNALSYM TV_INSERTSTRUCTA}
  5040.   TV_INSERTSTRUCTA = tagTVINSERTSTRUCTA;
  5041.   {$EXTERNALSYM TV_INSERTSTRUCTW}
  5042.   TV_INSERTSTRUCTW = tagTVINSERTSTRUCTW;
  5043.   {$EXTERNALSYM TV_INSERTSTRUCT}
  5044.   TV_INSERTSTRUCT = TV_INSERTSTRUCTA;
  5045.  
  5046. const
  5047.   {$EXTERNALSYM TVM_INSERTITEMA}
  5048.   TVM_INSERTITEMA          = TV_FIRST + 0;
  5049.   {$EXTERNALSYM TVM_INSERTITEMW}
  5050.   TVM_INSERTITEMW          = TV_FIRST + 50;
  5051.  
  5052.  
  5053.  
  5054.  
  5055.   {$EXTERNALSYM TVM_INSERTITEM}
  5056.   TVM_INSERTITEM          = TVM_INSERTITEMA;
  5057.  
  5058.  
  5059. {$EXTERNALSYM TreeView_InsertItem}
  5060. function TreeView_InsertItem(hwnd: HWND; const lpis: TTVInsertStruct): HTreeItem;
  5061.  
  5062. const
  5063.   {$EXTERNALSYM TVM_DELETEITEM}
  5064.   TVM_DELETEITEM          = TV_FIRST + 1;
  5065.  
  5066. {$EXTERNALSYM TreeView_DeleteItem}
  5067. function TreeView_DeleteItem(hwnd: HWND; hitem: HTreeItem): Bool;
  5068.  
  5069. {$EXTERNALSYM TreeView_DeleteAllItems}
  5070. function TreeView_DeleteAllItems(hwnd: HWND): Bool;
  5071.  
  5072. const
  5073.   {$EXTERNALSYM TVM_EXPAND}
  5074.   TVM_EXPAND              = TV_FIRST + 2;
  5075.  
  5076. {$EXTERNALSYM TreeView_Expand}
  5077. function TreeView_Expand(hwnd: HWND; hitem: HTreeItem; code: Integer): Bool;
  5078.  
  5079. const
  5080.   {$EXTERNALSYM TVE_COLLAPSE}
  5081.   TVE_COLLAPSE            = $0001;
  5082.   {$EXTERNALSYM TVE_EXPAND}
  5083.   TVE_EXPAND              = $0002;
  5084.   {$EXTERNALSYM TVE_TOGGLE}
  5085.   TVE_TOGGLE              = $0003;
  5086.   {$EXTERNALSYM TVE_EXPANDPARTIAL}
  5087.   TVE_EXPANDPARTIAL       = $4000;
  5088.   {$EXTERNALSYM TVE_COLLAPSERESET}
  5089.   TVE_COLLAPSERESET       = $8000;
  5090.  
  5091. const
  5092.   {$EXTERNALSYM TVM_GETITEMRECT}
  5093.   TVM_GETITEMRECT         = TV_FIRST + 4;
  5094.  
  5095. {$EXTERNALSYM TreeView_GetItemRect}
  5096. function TreeView_GetItemRect(hwnd: HWND; hitem: HTreeItem;
  5097.   var prc: TRect; code: Bool): Bool;
  5098.  
  5099. const
  5100.   {$EXTERNALSYM TVM_GETCOUNT}
  5101.   TVM_GETCOUNT            = TV_FIRST + 5;
  5102.  
  5103. {$EXTERNALSYM TreeView_GetCount}
  5104. function TreeView_GetCount(hwnd: HWND): UINT;
  5105.  
  5106. const
  5107.   {$EXTERNALSYM TVM_GETINDENT}
  5108.   TVM_GETINDENT           = TV_FIRST + 6;
  5109.  
  5110. {$EXTERNALSYM TreeView_GetIndent}
  5111. function TreeView_GetIndent(hwnd: HWND): UINT;
  5112.  
  5113. const
  5114.   {$EXTERNALSYM TVM_SETINDENT}
  5115.   TVM_SETINDENT           = TV_FIRST + 7;
  5116.  
  5117. {$EXTERNALSYM TreeView_SetIndent}
  5118. function TreeView_SetIndent(hwnd: HWND; indent: Integer): Bool;
  5119.  
  5120. const
  5121.   {$EXTERNALSYM TVM_GETIMAGELIST}
  5122.   TVM_GETIMAGELIST        = TV_FIRST + 8;
  5123.  
  5124. {$EXTERNALSYM TreeView_GetImageList}
  5125. function TreeView_GetImageList(hwnd: HWND; iImage: Integer): HIMAGELIST;
  5126.  
  5127. const
  5128.   {$EXTERNALSYM TVSIL_NORMAL}
  5129.   TVSIL_NORMAL            = 0;
  5130.   {$EXTERNALSYM TVSIL_STATE}
  5131.   TVSIL_STATE             = 2;
  5132.  
  5133.  
  5134. const
  5135.   {$EXTERNALSYM TVM_SETIMAGELIST}
  5136.   TVM_SETIMAGELIST        = TV_FIRST + 9;
  5137.  
  5138. {$EXTERNALSYM TreeView_SetImageList}
  5139. function TreeView_SetImageList(hwnd: HWND; himl: HIMAGELIST;
  5140.   iImage: Integer): HIMAGELIST;
  5141.  
  5142. const
  5143.   {$EXTERNALSYM TVM_GETNEXTITEM}
  5144.   TVM_GETNEXTITEM         = TV_FIRST + 10;
  5145.  
  5146. {$EXTERNALSYM TreeView_GetNextItem}
  5147. function TreeView_GetNextItem(hwnd: HWND; hitem: HTreeItem;
  5148.   code: Integer): HTreeItem;
  5149.  
  5150. const
  5151.   {$EXTERNALSYM TVGN_ROOT}
  5152.   TVGN_ROOT               = $0000;
  5153.   {$EXTERNALSYM TVGN_NEXT}
  5154.   TVGN_NEXT               = $0001;
  5155.   {$EXTERNALSYM TVGN_PREVIOUS}
  5156.   TVGN_PREVIOUS           = $0002;
  5157.   {$EXTERNALSYM TVGN_PARENT}
  5158.   TVGN_PARENT             = $0003;
  5159.   {$EXTERNALSYM TVGN_CHILD}
  5160.   TVGN_CHILD              = $0004;
  5161.   {$EXTERNALSYM TVGN_FIRSTVISIBLE}
  5162.   TVGN_FIRSTVISIBLE       = $0005;
  5163.   {$EXTERNALSYM TVGN_NEXTVISIBLE}
  5164.   TVGN_NEXTVISIBLE        = $0006;
  5165.   {$EXTERNALSYM TVGN_PREVIOUSVISIBLE}
  5166.   TVGN_PREVIOUSVISIBLE    = $0007;
  5167.   {$EXTERNALSYM TVGN_DROPHILITE}
  5168.   TVGN_DROPHILITE         = $0008;
  5169.   {$EXTERNALSYM TVGN_CARET}
  5170.   TVGN_CARET              = $0009;
  5171.   {$EXTERNALSYM TVGN_LASTVISIBLE}
  5172.   TVGN_LASTVISIBLE        = $000A;
  5173.  
  5174. {$EXTERNALSYM TreeView_GetChild}
  5175. function TreeView_GetChild(hwnd: HWND; hitem: HTreeItem): HTreeItem;
  5176. {$EXTERNALSYM TreeView_GetNextSibling}
  5177. function TreeView_GetNextSibling(hwnd: HWND; hitem: HTreeItem): HTreeItem;
  5178. {$EXTERNALSYM TreeView_GetPrevSibling}
  5179. function TreeView_GetPrevSibling(hwnd: HWND; hitem: HTreeItem): HTreeItem;
  5180. {$EXTERNALSYM TreeView_GetParent}
  5181. function TreeView_GetParent(hwnd: HWND; hitem: HTreeItem): HTreeItem;
  5182. {$EXTERNALSYM TreeView_GetFirstVisible}
  5183. function TreeView_GetFirstVisible(hwnd: HWND): HTreeItem;
  5184. {$EXTERNALSYM TreeView_GetNextVisible}
  5185. function TreeView_GetNextVisible(hwnd: HWND; hitem: HTreeItem): HTreeItem;
  5186. {$EXTERNALSYM TreeView_GetPrevVisible}
  5187. function TreeView_GetPrevVisible(hwnd: HWND; hitem: HTreeItem): HTreeItem;
  5188. {$EXTERNALSYM TreeView_GetSelection}
  5189. function TreeView_GetSelection(hwnd: HWND): HTreeItem;
  5190. {$EXTERNALSYM TreeView_GetDropHilite}
  5191. function TreeView_GetDropHilite(hwnd: HWND): HTreeItem;
  5192. {$EXTERNALSYM TreeView_GetRoot}
  5193. function TreeView_GetRoot(hwnd: HWND): HTreeItem;
  5194. {$EXTERNALSYM TreeView_GetLastVisible}
  5195. function TreeView_GetLastVisible(hwnd: HWND): HTreeItem;
  5196.  
  5197. const
  5198.   {$EXTERNALSYM TVM_SELECTITEM}
  5199.   TVM_SELECTITEM          = TV_FIRST + 11;
  5200.  
  5201. {$EXTERNALSYM TreeView_Select}
  5202. function TreeView_Select(hwnd: HWND; hitem: HTreeItem;
  5203.   code: Integer): HTreeItem;
  5204.  
  5205. {$EXTERNALSYM TreeView_SelectItem}
  5206. function TreeView_SelectItem(hwnd: HWND; hitem: HTreeItem): HTreeItem;
  5207. {$EXTERNALSYM TreeView_SelectDropTarget}
  5208. function TreeView_SelectDropTarget(hwnd: HWND; hitem: HTreeItem): HTreeItem;
  5209. {$EXTERNALSYM TreeView_SelectSetFirstVisible}
  5210. function TreeView_SelectSetFirstVisible(hwnd: HWND; hitem: HTreeItem): HTreeItem;
  5211.  
  5212. const
  5213.   {$EXTERNALSYM TVM_GETITEMA}
  5214.   TVM_GETITEMA             = TV_FIRST + 12;
  5215.   {$EXTERNALSYM TVM_GETITEMW}
  5216.   TVM_GETITEMW             = TV_FIRST + 62;
  5217.  
  5218.  
  5219.  
  5220.  
  5221.   {$EXTERNALSYM TVM_GETITEM}
  5222.   TVM_GETITEM             = TVM_GETITEMA;
  5223.  
  5224.  
  5225. {$EXTERNALSYM TreeView_GetItem}
  5226. function TreeView_GetItem(hwnd: HWND; var pitem: TTVItem): Bool;
  5227. {$EXTERNALSYM TreeView_GetItemA}
  5228. function TreeView_GetItemA(hwnd: HWND; var pitem: TTVItemA): Bool;
  5229. {$EXTERNALSYM TreeView_GetItemW}
  5230. function TreeView_GetItemW(hwnd: HWND; var pitem: TTVItemW): Bool;
  5231.  
  5232. const
  5233.   {$EXTERNALSYM TVM_SETITEMA}
  5234.   TVM_SETITEMA             = TV_FIRST + 13;
  5235.   {$EXTERNALSYM TVM_SETITEMW}
  5236.   TVM_SETITEMW             = TV_FIRST + 63;
  5237.  
  5238.  
  5239.  
  5240.  
  5241.   {$EXTERNALSYM TVM_SETITEM}
  5242.   TVM_SETITEM             = TVM_SETITEMA;
  5243.  
  5244.  
  5245. {$EXTERNALSYM TreeView_SetItem}
  5246. function TreeView_SetItem(hwnd: HWND; const pitem: TTVItem): Bool;
  5247. {$EXTERNALSYM TreeView_SetItemA}
  5248. function TreeView_SetItemA(hwnd: HWND; const pitem: TTVItemA): Bool;
  5249. {$EXTERNALSYM TreeView_SetItemW}
  5250. function TreeView_SetItemW(hwnd: HWND; const pitem: TTVItemW): Bool;
  5251.  
  5252. const
  5253.   {$EXTERNALSYM TVM_EDITLABELA}
  5254.   TVM_EDITLABELA           = TV_FIRST + 14;
  5255.   {$EXTERNALSYM TVM_EDITLABELW}
  5256.   TVM_EDITLABELW           = TV_FIRST + 65;
  5257.  
  5258.  
  5259.  
  5260.  
  5261.   {$EXTERNALSYM TVM_EDITLABEL}
  5262.   TVM_EDITLABEL           = TVM_EDITLABELA;
  5263.  
  5264.  
  5265. {$EXTERNALSYM TreeView_EditLabel}
  5266. function TreeView_EditLabel(hwnd: HWND; hitem: HTreeItem): HWND;
  5267. {$EXTERNALSYM TreeView_EditLabelA}
  5268. function TreeView_EditLabelA(hwnd: HWND; hitem: HTreeItem): HWND;
  5269. {$EXTERNALSYM TreeView_EditLabelW}
  5270. function TreeView_EditLabelW(hwnd: HWND; hitem: HTreeItem): HWND;
  5271.  
  5272. const
  5273.   {$EXTERNALSYM TVM_GETEDITCONTROL}
  5274.   TVM_GETEDITCONTROL      = TV_FIRST + 15;
  5275.  
  5276. {$EXTERNALSYM TreeView_GetEditControl}
  5277. function TreeView_GetEditControl(hwnd: HWND): HWND;
  5278.  
  5279.  
  5280. const
  5281.   {$EXTERNALSYM TVM_GETVISIBLECOUNT}
  5282.   TVM_GETVISIBLECOUNT     = TV_FIRST + 16;
  5283.  
  5284. {$EXTERNALSYM TreeView_GetVisibleCount}
  5285. function TreeView_GetVisibleCount(hwnd: HWND): UINT;
  5286.  
  5287. const
  5288.   {$EXTERNALSYM TVM_HITTEST}
  5289.   TVM_HITTEST             = TV_FIRST + 17;
  5290.  
  5291. type
  5292.   PTVHitTestInfo = ^TTVHitTestInfo;
  5293.   {$EXTERNALSYM tagTVHITTESTINFO}
  5294.   tagTVHITTESTINFO = packed record
  5295.     pt: TPoint;
  5296.     flags: UINT;
  5297.     hItem: HTreeItem;
  5298.   end;
  5299.   {$EXTERNALSYM _TV_HITTESTINFO}
  5300.   _TV_HITTESTINFO = tagTVHITTESTINFO;
  5301.   TTVHitTestInfo = tagTVHITTESTINFO;
  5302.   {$EXTERNALSYM TV_HITTESTINFO}
  5303.   TV_HITTESTINFO = tagTVHITTESTINFO;
  5304.  
  5305. {$EXTERNALSYM TreeView_HitTest}
  5306. function TreeView_HitTest(hwnd: HWND; var lpht: TTVHitTestInfo): HTreeItem;
  5307.  
  5308. const
  5309.   {$EXTERNALSYM TVHT_NOWHERE}
  5310.   TVHT_NOWHERE            = $0001;
  5311.   {$EXTERNALSYM TVHT_ONITEMICON}
  5312.   TVHT_ONITEMICON         = $0002;
  5313.   {$EXTERNALSYM TVHT_ONITEMLABEL}
  5314.   TVHT_ONITEMLABEL        = $0004;
  5315.   {$EXTERNALSYM TVHT_ONITEMINDENT}
  5316.   TVHT_ONITEMINDENT       = $0008;
  5317.   {$EXTERNALSYM TVHT_ONITEMBUTTON}
  5318.   TVHT_ONITEMBUTTON       = $0010;
  5319.   {$EXTERNALSYM TVHT_ONITEMRIGHT}
  5320.   TVHT_ONITEMRIGHT        = $0020;
  5321.   {$EXTERNALSYM TVHT_ONITEMSTATEICON}
  5322.   TVHT_ONITEMSTATEICON    = $0040;
  5323.  
  5324.   {$EXTERNALSYM TVHT_ONITEM}
  5325.   TVHT_ONITEM             = TVHT_ONITEMICON or TVHT_ONITEMLABEL or
  5326.                   TVHT_ONITEMSTATEICON;
  5327.  
  5328.   {$EXTERNALSYM TVHT_ABOVE}
  5329.   TVHT_ABOVE              = $0100;
  5330.   {$EXTERNALSYM TVHT_BELOW}
  5331.   TVHT_BELOW              = $0200;
  5332.   {$EXTERNALSYM TVHT_TORIGHT}
  5333.   TVHT_TORIGHT            = $0400;
  5334.   {$EXTERNALSYM TVHT_TOLEFT}
  5335.   TVHT_TOLEFT             = $0800;
  5336.  
  5337. const
  5338.   {$EXTERNALSYM TVM_CREATEDRAGIMAGE}
  5339.   TVM_CREATEDRAGIMAGE     = TV_FIRST + 18;
  5340.  
  5341. {$EXTERNALSYM TreeView_CreateDragImage}
  5342. function TreeView_CreateDragImage(hwnd: HWND; hitem: HTreeItem): HIMAGELIST;
  5343.  
  5344. const
  5345.   {$EXTERNALSYM TVM_SORTCHILDREN}
  5346.   TVM_SORTCHILDREN        = TV_FIRST + 19;
  5347.  
  5348. {$EXTERNALSYM TreeView_SortChildren}
  5349. function TreeView_SortChildren(hwnd: HWND; hitem: HTreeItem;
  5350.   recurse: Integer): Bool;
  5351.  
  5352. const
  5353.   {$EXTERNALSYM TVM_ENSUREVISIBLE}
  5354.   TVM_ENSUREVISIBLE       = TV_FIRST + 20;
  5355.  
  5356. {$EXTERNALSYM TreeView_EnsureVisible}
  5357. function TreeView_EnsureVisible(hwnd: HWND; hitem: HTreeItem): Bool;
  5358.  
  5359. const
  5360.   {$EXTERNALSYM TVM_SORTCHILDRENCB}
  5361.   TVM_SORTCHILDRENCB      = TV_FIRST + 21;
  5362.  
  5363. type
  5364.   {$EXTERNALSYM PFNTVCOMPARE}
  5365.   PFNTVCOMPARE = function(lParam1, lParam2, lParamSort: Longint): Integer stdcall;
  5366.   TTVCompare = PFNTVCOMPARE;
  5367.  
  5368. type
  5369.   {$EXTERNALSYM tagTVSORTCB}
  5370.   tagTVSORTCB = packed record
  5371.     hParent: HTreeItem;
  5372.     lpfnCompare: TTVCompare;
  5373.     lParam: LPARAM;
  5374.   end;
  5375.   {$EXTERNALSYM _TV_SORTCB}
  5376.   _TV_SORTCB = tagTVSORTCB;
  5377.   TTVSortCB = tagTVSORTCB;
  5378.   {$EXTERNALSYM TV_SORTCB}
  5379.   TV_SORTCB = tagTVSORTCB;
  5380.  
  5381. {$EXTERNALSYM TreeView_SortChildrenCB}
  5382. function TreeView_SortChildrenCB(hwnd: HWND; const psort: TTVSortCB;
  5383.   recurse: Integer): Bool;
  5384.  
  5385. const
  5386.   {$EXTERNALSYM TVM_ENDEDITLABELNOW}
  5387.   TVM_ENDEDITLABELNOW     = TV_FIRST + 22;
  5388.  
  5389. {$EXTERNALSYM TreeView_EndEditLabelNow}
  5390. function TreeView_EndEditLabelNow(hwnd: HWND; fCancel: Bool): Bool;
  5391.  
  5392. const
  5393.   {$EXTERNALSYM TVM_GETISEARCHSTRINGA}
  5394.   TVM_GETISEARCHSTRINGA    = TV_FIRST + 23;
  5395.   {$EXTERNALSYM TVM_GETISEARCHSTRINGW}
  5396.   TVM_GETISEARCHSTRINGW    = TV_FIRST + 64;
  5397.  
  5398.  
  5399.  
  5400.  
  5401.   {$EXTERNALSYM TVM_GETISEARCHSTRING}
  5402.   TVM_GETISEARCHSTRING    = TVM_GETISEARCHSTRINGA;
  5403.  
  5404.  
  5405. {$EXTERNALSYM TreeView_GetISearchString}
  5406. function TreeView_GetISearchString(hwndTV: HWND; lpsz: PChar): Bool;
  5407. {$EXTERNALSYM TreeView_GetISearchStringA}
  5408. function TreeView_GetISearchStringA(hwndTV: HWND; lpsz: PAnsiChar): Bool;
  5409. {$EXTERNALSYM TreeView_GetISearchStringW}
  5410. function TreeView_GetISearchStringW(hwndTV: HWND; lpsz: PWideChar): Bool;
  5411.  
  5412. const
  5413.   {$EXTERNALSYM TVM_SETTOOLTIPS}
  5414.   TVM_SETTOOLTIPS         = TV_FIRST + 24;
  5415.  
  5416. {$EXTERNALSYM TreeView_SetToolTips}
  5417. function TreeView_SetToolTips(wnd: HWND; hwndTT: HWND): HWND;
  5418.  
  5419. const
  5420.   {$EXTERNALSYM TVM_GETTOOLTIPS}
  5421.   TVM_GETTOOLTIPS         = TV_FIRST + 25;
  5422.  
  5423. {$EXTERNALSYM TreeView_GetToolTips}
  5424. function TreeView_GetToolTips(wnd: HWND): HWND;
  5425.  
  5426. const
  5427.   {$EXTERNALSYM TVM_SETINSERTMARK}
  5428.   TVM_SETINSERTMARK       = TV_FIRST + 26;
  5429.  
  5430. {$EXTERNALSYM TreeView_SetInsertMark}
  5431. function TreeView_SetInsertMark(hwnd: HWND; hItem: Integer; fAfter: BOOL): BOOL;
  5432.  
  5433. const
  5434.   {$EXTERNALSYM TVM_SETUNICODEFORMAT}
  5435.   TVM_SETUNICODEFORMAT     = CCM_SETUNICODEFORMAT;
  5436.  
  5437. {$EXTERNALSYM TreeView_SetUnicodeFormat}
  5438. function TreeView_SetUnicodeFormat(hwnd: HWND; fUnicode: BOOL): BOOL;
  5439.  
  5440. const
  5441.   {$EXTERNALSYM TVM_GETUNICODEFORMAT}
  5442.   TVM_GETUNICODEFORMAT     = CCM_GETUNICODEFORMAT;
  5443.  
  5444. {$EXTERNALSYM TreeView_GetUnicodeFormat}
  5445. function TreeView_GetUnicodeFormat(hwnd: HWND): BOOL;
  5446.  
  5447. const
  5448.   {$EXTERNALSYM TVM_SETITEMHEIGHT}
  5449.   TVM_SETITEMHEIGHT         = TV_FIRST + 27;
  5450.  
  5451. {$EXTERNALSYM TreeView_SetItemHeight}
  5452. function TreeView_SetItemHeight(hwnd: HWND; iHeight: Integer): Integer;
  5453.  
  5454. const
  5455.   {$EXTERNALSYM TVM_GETITEMHEIGHT}
  5456.   TVM_GETITEMHEIGHT         = TV_FIRST + 28;
  5457.  
  5458. {$EXTERNALSYM TreeView_GetItemHeight}
  5459. function TreeView_GetItemHeight(hwnd: HWND): Integer;
  5460.  
  5461. const
  5462.   {$EXTERNALSYM TVM_SETBKCOLOR}
  5463.   TVM_SETBKCOLOR              = TV_FIRST + 29;
  5464.  
  5465. {$EXTERNALSYM TreeView_SetBkColor}
  5466. function TreeView_SetBkColor(hwnd: HWND; clr: COLORREF): COLORREF;
  5467.  
  5468. const
  5469.   {$EXTERNALSYM TVM_SETTEXTCOLOR}
  5470.   TVM_SETTEXTCOLOR              = TV_FIRST + 30;
  5471.  
  5472. {$EXTERNALSYM TreeView_SetTextColor}
  5473. function TreeView_SetTextColor(hwnd: HWND; clr: COLORREF): COLORREF;
  5474.  
  5475. const
  5476.   {$EXTERNALSYM TVM_GETBKCOLOR}
  5477.   TVM_GETBKCOLOR              = TV_FIRST + 31;
  5478.  
  5479. {$EXTERNALSYM TreeView_GetBkColor}
  5480. function TreeView_GetBkColor(hwnd: HWND): COLORREF;
  5481.  
  5482. const
  5483.   {$EXTERNALSYM TVM_GETTEXTCOLOR}
  5484.   TVM_GETTEXTCOLOR              = TV_FIRST + 32;
  5485.  
  5486. {$EXTERNALSYM TreeView_GetTextColor}
  5487. function TreeView_GetTextColor(hwnd: HWND): COLORREF;
  5488.  
  5489. const
  5490.   {$EXTERNALSYM TVM_SETSCROLLTIME}
  5491.   TVM_SETSCROLLTIME              = TV_FIRST + 33;
  5492.  
  5493. {$EXTERNALSYM TreeView_SetScrollTime}
  5494. function TreeView_SetScrollTime(hwnd: HWND; uTime: UINT): UINT;
  5495.  
  5496. const
  5497.   {$EXTERNALSYM TVM_GETSCROLLTIME}
  5498.   TVM_GETSCROLLTIME              = TV_FIRST + 34;
  5499.  
  5500. {$EXTERNALSYM TreeView_GetScrollTime}
  5501. function TreeView_GetScrollTime(hwnd: HWND): UINT;
  5502.  
  5503. const
  5504.   {$EXTERNALSYM TVM_SETINSERTMARKCOLOR}
  5505.   TVM_SETINSERTMARKCOLOR         = TV_FIRST + 37;
  5506.  
  5507. {$EXTERNALSYM TreeView_SetInsertMarkColor}
  5508. function TreeView_SetInsertMarkColor(hwnd: HWND; clr: COLORREF): COLORREF;
  5509.  
  5510. const
  5511.   {$EXTERNALSYM TVM_GETINSERTMARKCOLOR}
  5512.   TVM_GETINSERTMARKCOLOR         = TV_FIRST + 38;
  5513.  
  5514. {$EXTERNALSYM TreeView_GetInsertMarkColor}
  5515. function TreeView_GetInsertMarkColor(hwnd: HWND): COLORREF;
  5516.  
  5517. type
  5518.   PNMTreeViewA = ^TNMTreeViewA;
  5519.   PNMTreeViewW = ^TNMTreeViewW;
  5520.   PNMTreeView = PNMTreeViewA;
  5521.   {$EXTERNALSYM tagNMTREEVIEWA}
  5522.   tagNMTREEVIEWA = packed record
  5523.     hdr: TNMHDR;
  5524.     action: UINT;
  5525.     itemOld: TTVItemA;
  5526.     itemNew: TTVItemA;
  5527.     ptDrag: TPoint;
  5528.   end;
  5529.   {$EXTERNALSYM tagNMTREEVIEWW}
  5530.   tagNMTREEVIEWW = packed record
  5531.     hdr: TNMHDR;
  5532.     action: UINT;
  5533.     itemOld: TTVItemW;
  5534.     itemNew: TTVItemW;
  5535.     ptDrag: TPoint;
  5536.   end;
  5537.   {$EXTERNALSYM tagNMTREEVIEW}
  5538.   tagNMTREEVIEW = tagNMTREEVIEWA;
  5539.   {$EXTERNALSYM _NM_TREEVIEWA}
  5540.   _NM_TREEVIEWA = tagNMTREEVIEWA;
  5541.   {$EXTERNALSYM _NM_TREEVIEWW}
  5542.   _NM_TREEVIEWW = tagNMTREEVIEWW;
  5543.   {$EXTERNALSYM _NM_TREEVIEW}
  5544.   _NM_TREEVIEW = _NM_TREEVIEWA;
  5545.   TNMTreeViewA  = tagNMTREEVIEWA;
  5546.   TNMTreeViewW  = tagNMTREEVIEWW;
  5547.   TNMTreeView = TNMTreeViewA;
  5548.   {$EXTERNALSYM NM_TREEVIEWA}
  5549.   NM_TREEVIEWA  = tagNMTREEVIEWA;
  5550.   {$EXTERNALSYM NM_TREEVIEWW}
  5551.   NM_TREEVIEWW  = tagNMTREEVIEWW;
  5552.   {$EXTERNALSYM NM_TREEVIEW}
  5553.   NM_TREEVIEW = NM_TREEVIEWA;
  5554.  
  5555. const
  5556.   {$EXTERNALSYM TVN_SELCHANGINGA}
  5557.   TVN_SELCHANGINGA         = TVN_FIRST-1;
  5558.   {$EXTERNALSYM TVN_SELCHANGEDA}
  5559.   TVN_SELCHANGEDA          = TVN_FIRST-2;
  5560.   {$EXTERNALSYM TVN_SELCHANGINGW}
  5561.   TVN_SELCHANGINGW         = TVN_FIRST-50;
  5562.   {$EXTERNALSYM TVN_SELCHANGEDW}
  5563.   TVN_SELCHANGEDW          = TVN_FIRST-51;
  5564.  
  5565.  
  5566.  
  5567.  
  5568.  
  5569.  
  5570.   {$EXTERNALSYM TVN_SELCHANGING}
  5571.   TVN_SELCHANGING         = TVN_SELCHANGINGA;
  5572.   {$EXTERNALSYM TVN_SELCHANGED}
  5573.   TVN_SELCHANGED          = TVN_SELCHANGEDA;
  5574.  
  5575.  
  5576. const
  5577.   {$EXTERNALSYM TVC_UNKNOWN}
  5578.   TVC_UNKNOWN             = $0000;
  5579.   {$EXTERNALSYM TVC_BYMOUSE}
  5580.   TVC_BYMOUSE             = $0001;
  5581.   {$EXTERNALSYM TVC_BYKEYBOARD}
  5582.   TVC_BYKEYBOARD          = $0002;
  5583.  
  5584. const
  5585.   {$EXTERNALSYM TVN_GETDISPINFOA}
  5586.   TVN_GETDISPINFOA         = TVN_FIRST-3;
  5587.   {$EXTERNALSYM TVN_SETDISPINFOA}
  5588.   TVN_SETDISPINFOA         = TVN_FIRST-4;
  5589.   {$EXTERNALSYM TVN_GETDISPINFOW}
  5590.   TVN_GETDISPINFOW         = TVN_FIRST-52;
  5591.   {$EXTERNALSYM TVN_SETDISPINFOW}
  5592.   TVN_SETDISPINFOW         = TVN_FIRST-53;
  5593.  
  5594.  
  5595.  
  5596.  
  5597.  
  5598.  
  5599.   {$EXTERNALSYM TVN_GETDISPINFO}
  5600.   TVN_GETDISPINFO         = TVN_GETDISPINFOA;
  5601.   {$EXTERNALSYM TVN_SETDISPINFO}
  5602.   TVN_SETDISPINFO         = TVN_SETDISPINFOA;
  5603.  
  5604.  
  5605.   {$EXTERNALSYM TVIF_DI_SETITEM}
  5606.   TVIF_DI_SETITEM         = $1000;
  5607.  
  5608. type
  5609.   PTVDispInfoA = ^TTVDispInfoA;
  5610.   PTVDispInfoW = ^TTVDispInfoW;
  5611.   PTVDispInfo = PTVDispInfoA;
  5612.   {$EXTERNALSYM tagTVDISPINFOA}
  5613.   tagTVDISPINFOA = packed record
  5614.     hdr: TNMHDR;
  5615.     item: TTVItemA;
  5616.   end;
  5617.   {$EXTERNALSYM tagTVDISPINFOW}
  5618.   tagTVDISPINFOW = packed record
  5619.     hdr: TNMHDR;
  5620.     item: TTVItemW;
  5621.   end;
  5622.   {$EXTERNALSYM tagTVDISPINFO}
  5623.   tagTVDISPINFO = tagTVDISPINFOA;
  5624.   {$EXTERNALSYM _TV_DISPINFOA}
  5625.   _TV_DISPINFOA = tagTVDISPINFOA;
  5626.   {$EXTERNALSYM _TV_DISPINFOW}
  5627.   _TV_DISPINFOW = tagTVDISPINFOW;
  5628.   {$EXTERNALSYM _TV_DISPINFO}
  5629.   _TV_DISPINFO = _TV_DISPINFOA;
  5630.   TTVDispInfoA = tagTVDISPINFOA;
  5631.   TTVDispInfoW = tagTVDISPINFOW;
  5632.   TTVDispInfo = TTVDispInfoA;
  5633.   {$EXTERNALSYM TV_DISPINFOA}
  5634.   TV_DISPINFOA = tagTVDISPINFOA;
  5635.   {$EXTERNALSYM TV_DISPINFOW}
  5636.   TV_DISPINFOW = tagTVDISPINFOW;
  5637.   {$EXTERNALSYM TV_DISPINFO}
  5638.   TV_DISPINFO = TV_DISPINFOA;
  5639.  
  5640. const
  5641.   {$EXTERNALSYM TVN_ITEMEXPANDINGA}
  5642.   TVN_ITEMEXPANDINGA       = TVN_FIRST-5;
  5643.   {$EXTERNALSYM TVN_ITEMEXPANDEDA}
  5644.   TVN_ITEMEXPANDEDA        = TVN_FIRST-6;
  5645.   {$EXTERNALSYM TVN_BEGINDRAGA}
  5646.   TVN_BEGINDRAGA           = TVN_FIRST-7;
  5647.   {$EXTERNALSYM TVN_BEGINRDRAGA}
  5648.   TVN_BEGINRDRAGA          = TVN_FIRST-8;
  5649.   {$EXTERNALSYM TVN_DELETEITEMA}
  5650.   TVN_DELETEITEMA          = TVN_FIRST-9;
  5651.   {$EXTERNALSYM TVN_BEGINLABELEDITA}
  5652.   TVN_BEGINLABELEDITA      = TVN_FIRST-10;
  5653.   {$EXTERNALSYM TVN_ENDLABELEDITA}
  5654.   TVN_ENDLABELEDITA        = TVN_FIRST-11;
  5655.   {$EXTERNALSYM TVN_GETINFOTIPA}
  5656.   TVN_GETINFOTIPA          = TVN_FIRST-13;
  5657.   {$EXTERNALSYM TVN_ITEMEXPANDINGW}
  5658.   TVN_ITEMEXPANDINGW       = TVN_FIRST-54;
  5659.   {$EXTERNALSYM TVN_ITEMEXPANDEDW}
  5660.   TVN_ITEMEXPANDEDW        = TVN_FIRST-55;
  5661.   {$EXTERNALSYM TVN_BEGINDRAGW}
  5662.   TVN_BEGINDRAGW           = TVN_FIRST-56;
  5663.   {$EXTERNALSYM TVN_BEGINRDRAGW}
  5664.   TVN_BEGINRDRAGW          = TVN_FIRST-57;
  5665.   {$EXTERNALSYM TVN_DELETEITEMW}
  5666.   TVN_DELETEITEMW          = TVN_FIRST-58;
  5667.   {$EXTERNALSYM TVN_BEGINLABELEDITW}
  5668.   TVN_BEGINLABELEDITW      = TVN_FIRST-59;
  5669.   {$EXTERNALSYM TVN_ENDLABELEDITW}
  5670.   TVN_ENDLABELEDITW        = TVN_FIRST-60;
  5671.   {$EXTERNALSYM TVN_GETINFOTIPW}
  5672.   TVN_GETINFOTIPW          = TVN_FIRST-14;
  5673.  
  5674.  
  5675.  
  5676.  
  5677.  
  5678.  
  5679.  
  5680.  
  5681.  
  5682.  
  5683.  
  5684.  
  5685.  
  5686.  
  5687.  
  5688.  
  5689.  
  5690.  
  5691.   {$EXTERNALSYM TVN_ITEMEXPANDING}
  5692.   TVN_ITEMEXPANDING       = TVN_ITEMEXPANDINGA;
  5693.   {$EXTERNALSYM TVN_ITEMEXPANDED}
  5694.   TVN_ITEMEXPANDED        = TVN_ITEMEXPANDEDA;
  5695.   {$EXTERNALSYM TVN_BEGINDRAG}
  5696.   TVN_BEGINDRAG           = TVN_BEGINDRAGA;
  5697.   {$EXTERNALSYM TVN_BEGINRDRAG}
  5698.   TVN_BEGINRDRAG          = TVN_BEGINRDRAGA;
  5699.   {$EXTERNALSYM TVN_DELETEITEM}
  5700.   TVN_DELETEITEM          = TVN_DELETEITEMA;
  5701.   {$EXTERNALSYM TVN_BEGINLABELEDIT}
  5702.   TVN_BEGINLABELEDIT      = TVN_BEGINLABELEDITA;
  5703.   {$EXTERNALSYM TVN_ENDLABELEDIT}
  5704.   TVN_ENDLABELEDIT        = TVN_ENDLABELEDITA;
  5705.   {$EXTERNALSYM TVN_GETINFOTIP}
  5706.   TVN_GETINFOTIP         = TVN_GETINFOTIPA;
  5707.  
  5708.  
  5709. const
  5710.   {$EXTERNALSYM TVN_KEYDOWN}
  5711.   TVN_KEYDOWN             = TVN_FIRST-12;
  5712.   {$EXTERNALSYM TVN_SINGLEEXPAND}
  5713.   TVN_SINGLEEXPAND        = TVN_FIRST-15;
  5714.  
  5715. type
  5716.   {$EXTERNALSYM tagTVKEYDOWN}
  5717.   tagTVKEYDOWN = packed record
  5718.     hdr: TNMHDR;
  5719.     wVKey: Word;
  5720.     flags: UINT;
  5721.   end;
  5722.   {$EXTERNALSYM _TV_KEYDOWN}
  5723.   _TV_KEYDOWN = tagTVKEYDOWN;
  5724.   TTVKeyDown = tagTVKEYDOWN;
  5725.   {$EXTERNALSYM TV_KEYDOWN}
  5726.   TV_KEYDOWN = tagTVKEYDOWN;
  5727.  
  5728.   {$EXTERNALSYM tagNMTVCUSTOMDRAW}
  5729.   tagNMTVCUSTOMDRAW = packed record
  5730.     nmcd: TNMCustomDraw;
  5731.     clrText: COLORREF;
  5732.     clrTextBk: COLORREF;
  5733.     iLevel: Integer;
  5734.   end;
  5735.   PNMTVCustomDraw = ^TNMTVCustomDraw;
  5736.   TNMTVCustomDraw = tagNMTVCUSTOMDRAW;
  5737.  
  5738.   // for tooltips
  5739.   {$EXTERNALSYM tagNMTVGETINFOTIPA}
  5740.   tagNMTVGETINFOTIPA = packed record
  5741.     hdr: TNMHdr;
  5742.     pszText: PAnsiChar;
  5743.     cchTextMax: Integer;
  5744.     hItem: HTREEITEM;
  5745.     lParam: LPARAM;
  5746.   end;
  5747.   {$EXTERNALSYM tagNMTVGETINFOTIPW}
  5748.   tagNMTVGETINFOTIPW = packed record
  5749.     hdr: TNMHdr;
  5750.     pszText: PWideChar;
  5751.     cchTextMax: Integer;
  5752.     hItem: HTREEITEM;
  5753.     lParam: LPARAM;
  5754.   end;
  5755.   {$EXTERNALSYM tagNMTVGETINFOTIP}
  5756.   tagNMTVGETINFOTIP = tagNMTVGETINFOTIPA;
  5757.   PNMTVGetInfoTipA = ^TNMTVGetInfoTipA;
  5758.   PNMTVGetInfoTipW = ^TNMTVGetInfoTipW;
  5759.   PNMTVGetInfoTip = PNMTVGetInfoTipA;
  5760.   TNMTVGetInfoTipA = tagNMTVGETINFOTIPA;
  5761.   TNMTVGetInfoTipW = tagNMTVGETINFOTIPW;
  5762.   TNMTVGetInfoTip = TNMTVGetInfoTipA;
  5763.  
  5764. const
  5765.   // treeview's customdraw return meaning don't draw images.  valid on CDRF_NOTIFYITEMPREPAINT
  5766.   {$EXTERNALSYM TVCDRF_NOIMAGES}
  5767.   TVCDRF_NOIMAGES         = $00010000;
  5768.  
  5769. { ====== ComboBoxEx ======================== }
  5770.  
  5771. const
  5772.   {$EXTERNALSYM WC_COMBOBOXEX}
  5773.   WC_COMBOBOXEX = 'ComboBoxEx32';
  5774.  
  5775.   {$EXTERNALSYM CBEIF_TEXT}
  5776.   CBEIF_TEXT              = $00000001;
  5777.   {$EXTERNALSYM CBEIF_IMAGE}
  5778.   CBEIF_IMAGE             = $00000002;
  5779.   {$EXTERNALSYM CBEIF_SELECTEDIMAGE}
  5780.   CBEIF_SELECTEDIMAGE     = $00000004;
  5781.   {$EXTERNALSYM CBEIF_OVERLAY}
  5782.   CBEIF_OVERLAY           = $00000008;
  5783.   {$EXTERNALSYM CBEIF_INDENT}
  5784.   CBEIF_INDENT            = $00000010;
  5785.   {$EXTERNALSYM CBEIF_LPARAM}
  5786.   CBEIF_LPARAM            = $00000020;
  5787.  
  5788.   {$EXTERNALSYM CBEIF_DI_SETITEM}
  5789.   CBEIF_DI_SETITEM        = $10000000;
  5790.  
  5791. type
  5792.   {$EXTERNALSYM tagCOMBOBOXEXITEMA}
  5793.   tagCOMBOBOXEXITEMA = packed record
  5794.     mask: UINT;
  5795.     iItem: Integer;
  5796.     pszText: PAnsiChar;
  5797.     cchTextMax: Integer;
  5798.     iImage: Integer;
  5799.     iSelectedImage: Integer;
  5800.     iOverlay: Integer;
  5801.     iIndent: Integer;
  5802.     lParam: LPARAM;
  5803.   end;
  5804.   {$EXTERNALSYM tagCOMBOBOXEXITEMW}
  5805.   tagCOMBOBOXEXITEMW = packed record
  5806.     mask: UINT;
  5807.     iItem: Integer;
  5808.     pszText: PWideChar;
  5809.     cchTextMax: Integer;
  5810.     iImage: Integer;
  5811.     iSelectedImage: Integer;
  5812.     iOverlay: Integer;
  5813.     iIndent: Integer;
  5814.     lParam: LPARAM;
  5815.   end;
  5816.   {$EXTERNALSYM tagCOMBOBOXEXITEM}
  5817.   tagCOMBOBOXEXITEM = tagCOMBOBOXEXITEMA;
  5818.   PComboBoxExItemA = ^TComboBoxExItemA;
  5819.   PComboBoxExItemW = ^TComboBoxExItemW;
  5820.   PComboBoxExItem = PComboBoxExItemA;
  5821.   TComboBoxExItemA = tagCOMBOBOXEXITEMA;
  5822.   TComboBoxExItemW = tagCOMBOBOXEXITEMW;
  5823.   TComboBoxExItem = TComboBoxExItemA;
  5824.  
  5825. const
  5826.   {$EXTERNALSYM CBEM_INSERTITEMA}
  5827.   CBEM_INSERTITEMA        = WM_USER + 1;
  5828.   {$EXTERNALSYM CBEM_SETIMAGELIST}
  5829.   CBEM_SETIMAGELIST       = WM_USER + 2;
  5830.   {$EXTERNALSYM CBEM_GETIMAGELIST}
  5831.   CBEM_GETIMAGELIST       = WM_USER + 3;
  5832.   {$EXTERNALSYM CBEM_GETITEMA}
  5833.   CBEM_GETITEMA           = WM_USER + 4;
  5834.   {$EXTERNALSYM CBEM_SETITEMA}
  5835.   CBEM_SETITEMA           = WM_USER + 5;
  5836.   {$EXTERNALSYM CBEM_DELETEITEM}
  5837.   CBEM_DELETEITEM         = CB_DELETESTRING;
  5838.   {$EXTERNALSYM CBEM_GETCOMBOCONTROL}
  5839.   CBEM_GETCOMBOCONTROL    = WM_USER + 6;
  5840.   {$EXTERNALSYM CBEM_GETEDITCONTROL}
  5841.   CBEM_GETEDITCONTROL     = WM_USER + 7;
  5842.   {$EXTERNALSYM CBEM_SETEXSTYLE}
  5843.   CBEM_SETEXSTYLE         = WM_USER + 8;  // use SETEXTENDEDSTYLE instead
  5844.   {$EXTERNALSYM CBEM_GETEXSTYLE}
  5845.   CBEM_GETEXSTYLE         = WM_USER + 9;  // use GETEXTENDEDSTYLE instead
  5846.   {$EXTERNALSYM CBEM_GETEXTENDEDSTYLE}
  5847.   CBEM_GETEXTENDEDSTYLE   = WM_USER + 9;
  5848.   {$EXTERNALSYM CBEM_HASEDITCHANGED}
  5849.   CBEM_HASEDITCHANGED     = WM_USER + 10;
  5850.   {$EXTERNALSYM CBEM_INSERTITEMW}
  5851.   CBEM_INSERTITEMW        = WM_USER + 11;
  5852.   {$EXTERNALSYM CBEM_SETITEMW}
  5853.   CBEM_SETITEMW           = WM_USER + 12;
  5854.   {$EXTERNALSYM CBEM_GETITEMW}
  5855.   CBEM_GETITEMW           = WM_USER + 13;
  5856.   {$EXTERNALSYM CBEM_SETEXTENDEDSTYLE}
  5857.   CBEM_SETEXTENDEDSTYLE   = WM_USER + 14; // lparam == new style, wParam (optional) == mask
  5858.   {$EXTERNALSYM CBEM_SETUNICODEFORMAT}
  5859.   CBEM_SETUNICODEFORMAT   = CCM_SETUNICODEFORMAT;
  5860.   {$EXTERNALSYM CBEM_GETUNICODEFORMAT}
  5861.   CBEM_GETUNICODEFORMAT   = CCM_GETUNICODEFORMAT;
  5862.  
  5863.  
  5864.  
  5865.  
  5866.  
  5867.  
  5868.  
  5869.  
  5870.  
  5871.   {$EXTERNALSYM CBEM_INSERTITEM}
  5872.   CBEM_INSERTITEM         = CBEM_INSERTITEMA;
  5873.   {$EXTERNALSYM CBEM_SETITEM}
  5874.   CBEM_SETITEM            = CBEM_SETITEMA;
  5875.   {$EXTERNALSYM CBEM_GETITEM}
  5876.   CBEM_GETITEM            = CBEM_GETITEMA;
  5877.  
  5878.  
  5879.   {$EXTERNALSYM CBES_EX_NOEDITIMAGE}
  5880.   CBES_EX_NOEDITIMAGE          = $00000001;
  5881.   {$EXTERNALSYM CBES_EX_NOEDITIMAGEINDENT}
  5882.   CBES_EX_NOEDITIMAGEINDENT    = $00000002;
  5883.   {$EXTERNALSYM CBES_EX_PATHWORDBREAKPROC}
  5884.   CBES_EX_PATHWORDBREAKPROC    = $00000004;
  5885.   {$EXTERNALSYM CBES_EX_NOSIZELIMIT}
  5886.   CBES_EX_NOSIZELIMIT          = $00000008;
  5887.   {$EXTERNALSYM CBES_EX_CASESENSITIVE}
  5888.   CBES_EX_CASESENSITIVE        = $00000010;
  5889.  
  5890. type
  5891.   {$EXTERNALSYM NMCOMBOBOXEXA}
  5892.   NMCOMBOBOXEXA = packed record
  5893.     hdr: TNMHdr;
  5894.     ceItem: TComboBoxExItemA;
  5895.   end;
  5896.   {$EXTERNALSYM NMCOMBOBOXEXW}
  5897.   NMCOMBOBOXEXW = packed record
  5898.     hdr: TNMHdr;
  5899.     ceItem: TComboBoxExItemW;
  5900.   end;
  5901.   {$EXTERNALSYM NMCOMBOBOXEX}
  5902.   NMCOMBOBOXEX = NMCOMBOBOXEXA;
  5903.   PNMComboBoxExA = ^TNMComboBoxExA;
  5904.   PNMComboBoxExW = ^TNMComboBoxExW;
  5905.   PNMComboBoxEx = PNMComboBoxExA;
  5906.   TNMComboBoxExA = NMCOMBOBOXEXA;
  5907.   TNMComboBoxExW = NMCOMBOBOXEXW;
  5908.   TNMComboBoxEx = TNMComboBoxExA;
  5909.  
  5910. const
  5911.   {$EXTERNALSYM CBEN_GETDISPINFOA}
  5912.   CBEN_GETDISPINFOA       = CBEN_FIRST - 0;
  5913.   {$EXTERNALSYM CBEN_INSERTITEM}
  5914.   CBEN_INSERTITEM         = CBEN_FIRST - 1;
  5915.   {$EXTERNALSYM CBEN_DELETEITEM}
  5916.   CBEN_DELETEITEM         = CBEN_FIRST - 2;
  5917.   {$EXTERNALSYM CBEN_BEGINEDIT}
  5918.   CBEN_BEGINEDIT          = CBEN_FIRST - 4;
  5919.   {$EXTERNALSYM CBEN_ENDEDITA}
  5920.   CBEN_ENDEDITA           = CBEN_FIRST - 5; // lParam specifies why the endedit is happening
  5921.   {$EXTERNALSYM CBEN_ENDEDITW}
  5922.   CBEN_ENDEDITW           = CBEN_FIRST - 6;
  5923.   {$EXTERNALSYM CBEN_GETDISPINFOW}
  5924.   CBEN_GETDISPINFOW       = CBEN_FIRST - 7;
  5925.   {$EXTERNALSYM CBEN_DRAGBEGINA}
  5926.   CBEN_DRAGBEGINA                = CBEN_FIRST - 8;
  5927.   {$EXTERNALSYM CBEN_DRAGBEGINW}
  5928.   CBEN_DRAGBEGINW                = CBEN_FIRST - 9;
  5929.  
  5930.  
  5931.  
  5932.  
  5933.  
  5934.  
  5935.  
  5936.  
  5937.  
  5938.   {$EXTERNALSYM CBEN_ENDEDIT}
  5939.   CBEN_ENDEDIT            = CBEN_ENDEDITA;
  5940.   {$EXTERNALSYM CBEN_GETDISPINFO}
  5941.   CBEN_GETDISPINFO        = CBEN_GETDISPINFOA;
  5942.   {$EXTERNALSYM CBEN_DRAGBEGIN}
  5943.   CBEN_DRAGBEGIN          = CBEN_DRAGBEGINA;
  5944.  
  5945.  
  5946.   {$EXTERNALSYM CBENF_KILLFOCUS}
  5947.   CBENF_KILLFOCUS         = 1;
  5948.   {$EXTERNALSYM CBENF_RETURN}
  5949.   CBENF_RETURN            = 2;
  5950.   {$EXTERNALSYM CBENF_ESCAPE}
  5951.   CBENF_ESCAPE            = 3;
  5952.   {$EXTERNALSYM CBENF_DROPDOWN}
  5953.   CBENF_DROPDOWN          = 4;
  5954.  
  5955.   {$EXTERNALSYM CBEMAXSTRLEN}
  5956.   CBEMAXSTRLEN = 260;
  5957.  
  5958. type
  5959.   // CBEN_DRAGBEGIN sends this information ...
  5960.   {$EXTERNALSYM NMCBEDRAGBEGINA}
  5961.   NMCBEDRAGBEGINA = packed record
  5962.     hdr: TNMHdr;
  5963.     iItemid: Integer;
  5964.     szText: array[0..CBEMAXSTRLEN - 1] of AnsiChar;
  5965.   end;
  5966.   {$EXTERNALSYM NMCBEDRAGBEGINW}
  5967.   NMCBEDRAGBEGINW = packed record
  5968.     hdr: TNMHdr;
  5969.     iItemid: Integer;
  5970.     szText: array[0..CBEMAXSTRLEN - 1] of WideChar;
  5971.   end;
  5972.   {$EXTERNALSYM NMCBEDRAGBEGIN}
  5973.   NMCBEDRAGBEGIN = NMCBEDRAGBEGINA;
  5974.   PNMCBEDragBeginA = ^TNMCBEDragBeginA;
  5975.   PNMCBEDragBeginW = ^TNMCBEDragBeginW;
  5976.   PNMCBEDragBegin = PNMCBEDragBeginA;
  5977.   TNMCBEDragBeginA = NMCBEDRAGBEGINA;
  5978.   TNMCBEDragBeginW = NMCBEDRAGBEGINW;
  5979.   TNMCBEDragBegin = TNMCBEDragBeginA;
  5980.  
  5981.   // CBEN_ENDEDIT sends this information...
  5982.   // fChanged if the user actually did anything
  5983.   // iNewSelection gives what would be the new selection unless the notify is failed
  5984.   //                      iNewSelection may be CB_ERR if there's no match
  5985.   {$EXTERNALSYM NMCBEENDEDITA}
  5986.   NMCBEENDEDITA = packed record
  5987.     hdr: TNMHdr;
  5988.     fChanged: BOOL;
  5989.     iNewSelection: Integer;
  5990.     szText: array[0..CBEMAXSTRLEN - 1] of AnsiChar;
  5991.     iWhy: Integer;
  5992.   end;
  5993.   {$EXTERNALSYM NMCBEENDEDITW}
  5994.   NMCBEENDEDITW = packed record
  5995.     hdr: TNMHdr;
  5996.     fChanged: BOOL;
  5997.     iNewSelection: Integer;
  5998.     szText: array[0..CBEMAXSTRLEN - 1] of WideChar;
  5999.     iWhy: Integer;
  6000.   end;
  6001.   {$EXTERNALSYM NMCBEENDEDIT}
  6002.   NMCBEENDEDIT = NMCBEENDEDITA;
  6003.   PNMCBEEndEditA = ^TNMCBEEndEditA;
  6004.   PNMCBEEndEditW = ^TNMCBEEndEditW;
  6005.   PNMCBEEndEdit = PNMCBEEndEditA;
  6006.   TNMCBEEndEditA = NMCBEENDEDITA;
  6007.   TNMCBEEndEditW = NMCBEENDEDITW;
  6008.   TNMCBEEndEdit = TNMCBEEndEditA;
  6009.  
  6010. { ====== TAB CONTROL ======================== }
  6011.  
  6012. const
  6013.   {$EXTERNALSYM WC_TABCONTROL}
  6014.   WC_TABCONTROL = 'SysTabControl32';
  6015.  
  6016. const
  6017.   {$EXTERNALSYM TCS_SCROLLOPPOSITE}
  6018.   TCS_SCROLLOPPOSITE    = $0001;  // assumes multiline tab
  6019.   {$EXTERNALSYM TCS_BOTTOM}
  6020.   TCS_BOTTOM            = $0002;
  6021.   {$EXTERNALSYM TCS_RIGHT}
  6022.   TCS_RIGHT             = $0002;
  6023.   {$EXTERNALSYM TCS_MULTISELECT}
  6024.   TCS_MULTISELECT       = $0004;  // allow multi-select in button mode
  6025.   {$EXTERNALSYM TCS_FLATBUTTONS}
  6026.   TCS_FLATBUTTONS       = $0008;
  6027.   {$EXTERNALSYM TCS_FORCEICONLEFT}
  6028.   TCS_FORCEICONLEFT     = $0010;
  6029.   {$EXTERNALSYM TCS_FORCELABELLEFT}
  6030.   TCS_FORCELABELLEFT    = $0020;
  6031.   {$EXTERNALSYM TCS_HOTTRACK}
  6032.   TCS_HOTTRACK          = $0040;
  6033.   {$EXTERNALSYM TCS_VERTICAL}
  6034.   TCS_VERTICAL          = $0080;
  6035.   {$EXTERNALSYM TCS_TABS}
  6036.   TCS_TABS              = $0000;
  6037.   {$EXTERNALSYM TCS_BUTTONS}
  6038.   TCS_BUTTONS           = $0100;
  6039.   {$EXTERNALSYM TCS_SINGLELINE}
  6040.   TCS_SINGLELINE        = $0000;
  6041.   {$EXTERNALSYM TCS_MULTILINE}
  6042.   TCS_MULTILINE         = $0200;
  6043.   {$EXTERNALSYM TCS_RIGHTJUSTIFY}
  6044.   TCS_RIGHTJUSTIFY      = $0000;
  6045.   {$EXTERNALSYM TCS_FIXEDWIDTH}
  6046.   TCS_FIXEDWIDTH        = $0400;
  6047.   {$EXTERNALSYM TCS_RAGGEDRIGHT}
  6048.   TCS_RAGGEDRIGHT       = $0800;
  6049.   {$EXTERNALSYM TCS_FOCUSONBUTTONDOWN}
  6050.   TCS_FOCUSONBUTTONDOWN = $1000;
  6051.   {$EXTERNALSYM TCS_OWNERDRAWFIXED}
  6052.   TCS_OWNERDRAWFIXED    = $2000;
  6053.   {$EXTERNALSYM TCS_TOOLTIPS}
  6054.   TCS_TOOLTIPS          = $4000;
  6055.   {$EXTERNALSYM TCS_FOCUSNEVER}
  6056.   TCS_FOCUSNEVER        = $8000;
  6057.  
  6058.   {$EXTERNALSYM TCS_EX_FLATSEPARATORS}
  6059.   TCS_EX_FLATSEPARATORS = $00000001;
  6060.   {$EXTERNALSYM TCS_EX_REGISTERDROP}
  6061.   TCS_EX_REGISTERDROP   = $00000002;
  6062.  
  6063.   {$EXTERNALSYM TCM_GETIMAGELIST}
  6064.   TCM_GETIMAGELIST       = TCM_FIRST + 2;
  6065.   {$EXTERNALSYM TCM_SETIMAGELIST}
  6066.   TCM_SETIMAGELIST       = TCM_FIRST + 3;
  6067.   {$EXTERNALSYM TCM_GETITEMCOUNT}
  6068.   TCM_GETITEMCOUNT       = TCM_FIRST + 4;
  6069.   {$EXTERNALSYM TCM_DELETEITEM}
  6070.   TCM_DELETEITEM         = TCM_FIRST + 8;
  6071.   {$EXTERNALSYM TCM_DELETEALLITEMS}
  6072.   TCM_DELETEALLITEMS     = TCM_FIRST + 9;
  6073.   {$EXTERNALSYM TCM_GETITEMRECT}
  6074.   TCM_GETITEMRECT        = TCM_FIRST + 10;
  6075.   {$EXTERNALSYM TCM_GETCURSEL}
  6076.   TCM_GETCURSEL          = TCM_FIRST + 11;
  6077.   {$EXTERNALSYM TCM_SETCURSEL}
  6078.   TCM_SETCURSEL          = TCM_FIRST + 12;
  6079.   {$EXTERNALSYM TCM_HITTEST}
  6080.   TCM_HITTEST            = TCM_FIRST + 13;
  6081.   {$EXTERNALSYM TCM_SETITEMEXTRA}
  6082.   TCM_SETITEMEXTRA       = TCM_FIRST + 14;
  6083.   {$EXTERNALSYM TCM_ADJUSTRECT}
  6084.   TCM_ADJUSTRECT         = TCM_FIRST + 40;
  6085.   {$EXTERNALSYM TCM_SETITEMSIZE}
  6086.   TCM_SETITEMSIZE        = TCM_FIRST + 41;
  6087.   {$EXTERNALSYM TCM_REMOVEIMAGE}
  6088.   TCM_REMOVEIMAGE        = TCM_FIRST + 42;
  6089.   {$EXTERNALSYM TCM_SETPADDING}
  6090.   TCM_SETPADDING         = TCM_FIRST + 43;
  6091.   {$EXTERNALSYM TCM_GETROWCOUNT}
  6092.   TCM_GETROWCOUNT        = TCM_FIRST + 44;
  6093.   {$EXTERNALSYM TCM_GETTOOLTIPS}
  6094.   TCM_GETTOOLTIPS        = TCM_FIRST + 45;
  6095.   {$EXTERNALSYM TCM_SETTOOLTIPS}
  6096.   TCM_SETTOOLTIPS        = TCM_FIRST + 46;
  6097.   {$EXTERNALSYM TCM_GETCURFOCUS}
  6098.   TCM_GETCURFOCUS        = TCM_FIRST + 47;
  6099.   {$EXTERNALSYM TCM_SETCURFOCUS}
  6100.   TCM_SETCURFOCUS        = TCM_FIRST + 48;
  6101.   {$EXTERNALSYM TCM_SETMINTABWIDTH}
  6102.   TCM_SETMINTABWIDTH     = TCM_FIRST + 49;
  6103.   {$EXTERNALSYM TCM_DESELECTALL}
  6104.   TCM_DESELECTALL        = TCM_FIRST + 50;
  6105.   {$EXTERNALSYM TCM_HIGHLIGHTITEM}
  6106.   TCM_HIGHLIGHTITEM      = TCM_FIRST + 51;
  6107.   {$EXTERNALSYM TCM_SETEXTENDEDSTYLE}
  6108.   TCM_SETEXTENDEDSTYLE   = TCM_FIRST + 52;  // optional wParam == mask
  6109.   {$EXTERNALSYM TCM_GETEXTENDEDSTYLE}
  6110.   TCM_GETEXTENDEDSTYLE   = TCM_FIRST + 53;
  6111.   {$EXTERNALSYM TCM_SETUNICODEFORMAT}
  6112.   TCM_SETUNICODEFORMAT   = CCM_SETUNICODEFORMAT;
  6113.   {$EXTERNALSYM TCM_GETUNICODEFORMAT}
  6114.   TCM_GETUNICODEFORMAT   = CCM_GETUNICODEFORMAT;
  6115.  
  6116.   {$EXTERNALSYM TCIF_TEXT}
  6117.   TCIF_TEXT       = $0001;
  6118.   {$EXTERNALSYM TCIF_IMAGE}
  6119.   TCIF_IMAGE      = $0002;
  6120.   {$EXTERNALSYM TCIF_RTLREADING}
  6121.   TCIF_RTLREADING = $0004;
  6122.   {$EXTERNALSYM TCIF_PARAM}
  6123.   TCIF_PARAM      = $0008;
  6124.   {$EXTERNALSYM TCIF_STATE}
  6125.   TCIF_STATE      = $0010;
  6126.  
  6127.   {$EXTERNALSYM TCIS_BUTTONPRESSED}
  6128.   TCIS_BUTTONPRESSED      = $0001;
  6129.   {$EXTERNALSYM TCIS_HIGHLIGHTED}
  6130.   TCIS_HIGHLIGHTED        = $0002;
  6131.  
  6132. type
  6133.   PTCItemHeaderA = ^TTCItemHeaderA;
  6134.   PTCItemHeaderW = ^TTCItemHeaderW;
  6135.   PTCItemHeader = PTCItemHeaderA;
  6136.   {$EXTERNALSYM tagTCITEMHEADERA}
  6137.   tagTCITEMHEADERA = packed record
  6138.     mask: UINT;
  6139.     lpReserved1: UINT;
  6140.     lpReserved2: UINT;
  6141.     pszText: PAnsiChar;
  6142.     cchTextMax: Integer;
  6143.     iImage: Integer;
  6144.   end;
  6145.   {$EXTERNALSYM tagTCITEMHEADERW}
  6146.   tagTCITEMHEADERW = packed record
  6147.     mask: UINT;
  6148.     lpReserved1: UINT;
  6149.     lpReserved2: UINT;
  6150.     pszText: PWideChar;
  6151.     cchTextMax: Integer;
  6152.     iImage: Integer;
  6153.   end;
  6154.   {$EXTERNALSYM tagTCITEMHEADER}
  6155.   tagTCITEMHEADER = tagTCITEMHEADERA;
  6156.   {$EXTERNALSYM _TC_ITEMHEADERA}
  6157.   _TC_ITEMHEADERA = tagTCITEMHEADERA;
  6158.   {$EXTERNALSYM _TC_ITEMHEADERW}
  6159.   _TC_ITEMHEADERW = tagTCITEMHEADERW;
  6160.   {$EXTERNALSYM _TC_ITEMHEADER}
  6161.   _TC_ITEMHEADER = _TC_ITEMHEADERA;
  6162.   TTCItemHeaderA = tagTCITEMHEADERA;
  6163.   TTCItemHeaderW = tagTCITEMHEADERW;
  6164.   TTCItemHeader = TTCItemHeaderA;
  6165.   {$EXTERNALSYM TC_ITEMHEADERA}
  6166.   TC_ITEMHEADERA = tagTCITEMHEADERA;
  6167.   {$EXTERNALSYM TC_ITEMHEADERW}
  6168.   TC_ITEMHEADERW = tagTCITEMHEADERW;
  6169.   {$EXTERNALSYM TC_ITEMHEADER}
  6170.   TC_ITEMHEADER = TC_ITEMHEADERA;
  6171.  
  6172.   PTCItemA = ^TTCItemA;
  6173.   PTCItemW = ^TTCItemW;
  6174.   PTCItem = PTCItemA;
  6175.   {$EXTERNALSYM tagTCITEMA}
  6176.   tagTCITEMA = packed record
  6177.     mask: UINT;
  6178.     dwState: UINT;
  6179.     dwStateMask: UINT;
  6180.     pszText: PAnsiChar;
  6181.     cchTextMax: Integer;
  6182.     iImage: Integer;
  6183.     lParam: LPARAM;
  6184.   end;
  6185.   {$EXTERNALSYM tagTCITEMW}
  6186.   tagTCITEMW = packed record
  6187.     mask: UINT;
  6188.     dwState: UINT;
  6189.     dwStateMask: UINT;
  6190.     pszText: PWideChar;
  6191.     cchTextMax: Integer;
  6192.     iImage: Integer;
  6193.     lParam: LPARAM;
  6194.   end;
  6195.   {$EXTERNALSYM tagTCITEM}
  6196.   tagTCITEM = tagTCITEMA;
  6197.   {$EXTERNALSYM _TC_ITEMA}
  6198.   _TC_ITEMA = tagTCITEMA;
  6199.   {$EXTERNALSYM _TC_ITEMW}
  6200.   _TC_ITEMW = tagTCITEMW;
  6201.   {$EXTERNALSYM _TC_ITEM}
  6202.   _TC_ITEM = _TC_ITEMA;
  6203.   TTCItemA = tagTCITEMA;
  6204.   TTCItemW = tagTCITEMW;
  6205.   TTCItem = TTCItemA;
  6206.   {$EXTERNALSYM TC_ITEMA}
  6207.   TC_ITEMA = tagTCITEMA;
  6208.   {$EXTERNALSYM TC_ITEMW}
  6209.   TC_ITEMW = tagTCITEMW;
  6210.   {$EXTERNALSYM TC_ITEM}
  6211.   TC_ITEM = TC_ITEMA;
  6212.  
  6213. const
  6214.   {$EXTERNALSYM TCM_GETITEMA}
  6215.   TCM_GETITEMA             = TCM_FIRST + 5;
  6216.   {$EXTERNALSYM TCM_SETITEMA}
  6217.   TCM_SETITEMA             = TCM_FIRST + 6;
  6218.   {$EXTERNALSYM TCM_INSERTITEMA}
  6219.   TCM_INSERTITEMA          = TCM_FIRST + 7;
  6220.   {$EXTERNALSYM TCM_GETITEMW}
  6221.   TCM_GETITEMW             = TCM_FIRST + 60;
  6222.   {$EXTERNALSYM TCM_SETITEMW}
  6223.   TCM_SETITEMW             = TCM_FIRST + 61;
  6224.   {$EXTERNALSYM TCM_INSERTITEMW}
  6225.   TCM_INSERTITEMW          = TCM_FIRST + 62;
  6226.  
  6227.  
  6228.  
  6229.  
  6230.  
  6231.  
  6232.  
  6233.  
  6234.   {$EXTERNALSYM TCM_GETITEM}
  6235.   TCM_GETITEM             = TCM_GETITEMA;
  6236.   {$EXTERNALSYM TCM_SETITEM}
  6237.   TCM_SETITEM             = TCM_SETITEMA;
  6238.   {$EXTERNALSYM TCM_INSERTITEM}
  6239.   TCM_INSERTITEM          = TCM_INSERTITEMA;
  6240.  
  6241.  
  6242. const
  6243.   {$EXTERNALSYM TCHT_NOWHERE}
  6244.   TCHT_NOWHERE     = $0001;
  6245.   {$EXTERNALSYM TCHT_ONITEMICON}
  6246.   TCHT_ONITEMICON  = $0002;
  6247.   {$EXTERNALSYM TCHT_ONITEMLABEL}
  6248.   TCHT_ONITEMLABEL = $0004;
  6249.   {$EXTERNALSYM TCHT_ONITEM}
  6250.   TCHT_ONITEM      = TCHT_ONITEMICON or TCHT_ONITEMLABEL;
  6251.  
  6252. type
  6253.   PTCHitTestInfo = ^TTCHitTestInfo;
  6254.   {$EXTERNALSYM tagTCHITTESTINFO}
  6255.   tagTCHITTESTINFO = packed record
  6256.     pt: TPoint;
  6257.     flags: UINT;
  6258.   end;
  6259.   {$EXTERNALSYM _TC_HITTESTINFO}
  6260.   _TC_HITTESTINFO = tagTCHITTESTINFO;
  6261.   TTCHitTestInfo = tagTCHITTESTINFO;
  6262.   {$EXTERNALSYM TC_HITTESTINFO}
  6263.   TC_HITTESTINFO = tagTCHITTESTINFO;
  6264.  
  6265.   {$EXTERNALSYM tagTCKEYDOWN}
  6266.   tagTCKEYDOWN = packed record
  6267.     hdr: TNMHDR;
  6268.     wVKey: Word;
  6269.     flags: UINT;
  6270.   end;
  6271.   {$EXTERNALSYM _TC_KEYDOWN}
  6272.   _TC_KEYDOWN = tagTCKEYDOWN;
  6273.   TTCKeyDown = tagTCKEYDOWN;
  6274.   {$EXTERNALSYM TC_KEYDOWN}
  6275.   TC_KEYDOWN = tagTCKEYDOWN;
  6276.  
  6277. const
  6278.   {$EXTERNALSYM TCN_KEYDOWN}
  6279.   TCN_KEYDOWN             = TCN_FIRST - 0;
  6280.   {$EXTERNALSYM TCN_SELCHANGE}
  6281.   TCN_SELCHANGE           = TCN_FIRST - 1;
  6282.   {$EXTERNALSYM TCN_SELCHANGING}
  6283.   TCN_SELCHANGING         = TCN_FIRST - 2;
  6284.   {$EXTERNALSYM TCN_GETOBJECT}
  6285.   TCN_GETOBJECT           = TCN_FIRST - 3;
  6286.  
  6287. {$EXTERNALSYM TabCtrl_HitTest}
  6288. function TabCtrl_HitTest(hwndTC: HWND; pinfo: PTCHitTestInfo): Integer;
  6289. {$EXTERNALSYM TabCtrl_SetItemExtra}
  6290. function TabCtrl_SetItemExtra(hwndTC: HWND; cb: Integer): BOOL;
  6291. {$EXTERNALSYM TabCtrl_AdjustRect}
  6292. function TabCtrl_AdjustRect(hwnd: HWND; bLarger: BOOL; prc: PRect): Integer;
  6293. {$EXTERNALSYM TabCtrl_SetItemSize}
  6294. function TabCtrl_SetItemSize(hwnd: HWND; x, y: Integer): DWORD;
  6295. {$EXTERNALSYM TabCtrl_RemoveImage}
  6296. procedure TabCtrl_RemoveImage(hwnd: HWND; i: Integer);
  6297. {$EXTERNALSYM TabCtrl_SetPadding}
  6298. procedure TabCtrl_SetPadding(hwnd: HWND; cx, cy: Integer);
  6299. {$EXTERNALSYM TabCtrl_GetRowCount}
  6300. function TabCtrl_GetRowCount(hwnd: HWND): Integer;
  6301. {$EXTERNALSYM TabCtrl_GetToolTips}
  6302. function TabCtrl_GetToolTips(wnd: HWND): HWND;
  6303. {$EXTERNALSYM TabCtrl_SetToolTips}
  6304. procedure TabCtrl_SetToolTips(hwnd: HWND; hwndTT: HWND);
  6305. {$EXTERNALSYM TabCtrl_GetCurFocus}
  6306. function TabCtrl_GetCurFocus(hwnd: HWND): Integer;
  6307. {$EXTERNALSYM TabCtrl_SetCurFocus}
  6308. procedure TabCtrl_SetCurFocus(hwnd: HWND; i: Integer);
  6309. {$EXTERNALSYM TabCtrl_SetMinTabWidth}
  6310. function TabCtrl_SetMinTabWidth(hwnd: HWND; x: Integer): Integer;
  6311. {$EXTERNALSYM TabCtrl_DeselectAll}
  6312. procedure TabCtrl_DeselectAll(hwnd: HWND; fExcludeFocus: BOOL);
  6313. {$EXTERNALSYM TabCtrl_HighlightItem}
  6314. function TabCtrl_HighlightItem(hwnd: HWND; i: Integer; fHighlight: WordBool): BOOL;
  6315. {$EXTERNALSYM TabCtrl_SetExtendedStyle}
  6316. function TabCtrl_SetExtendedStyle(hwnd: HWND; dw: DWORD): DWORD;
  6317. {$EXTERNALSYM TabCtrl_GetExtendedStyle}
  6318. function TabCtrl_GetExtendedStyle(hwnd: HWND): DWORD;
  6319. {$EXTERNALSYM TabCtrl_SetUnicodeFormat}
  6320. function TabCtrl_SetUnicodeFormat(hwnd: HWND; fUnicode: BOOL): BOOL;
  6321. {$EXTERNALSYM TabCtrl_GetUnicodeFormat}
  6322. function TabCtrl_GetUnicodeFormat(hwnd: HWND): BOOL;
  6323. {$EXTERNALSYM TabCtrl_GetItemRect}
  6324. function TabCtrl_GetItemRect(hwnd: HWND; i: Integer; var prc: TRect): BOOL;
  6325.  
  6326. { ====== ANIMATE CONTROL ================= }
  6327.  
  6328. const
  6329.   {$EXTERNALSYM ANIMATE_CLASS}
  6330.   ANIMATE_CLASS = 'SysAnimate32';
  6331.  
  6332. const
  6333.   {$EXTERNALSYM ACS_CENTER}
  6334.   ACS_CENTER              = $0001;
  6335.   {$EXTERNALSYM ACS_TRANSPARENT}
  6336.   ACS_TRANSPARENT         = $0002;
  6337.   {$EXTERNALSYM ACS_AUTOPLAY}
  6338.   ACS_AUTOPLAY            = $0004;
  6339.   {$EXTERNALSYM ACS_TIMER}
  6340.   ACS_TIMER               = $0008;  { don't use threads... use timers }
  6341.  
  6342.   {$EXTERNALSYM ACM_OPENA}
  6343.   ACM_OPENA                = WM_USER + 100;
  6344.   {$EXTERNALSYM ACM_OPENW}
  6345.   ACM_OPENW                = WM_USER + 103;
  6346.  
  6347.  
  6348.  
  6349.  
  6350.   {$EXTERNALSYM ACM_OPEN}
  6351.   ACM_OPEN                = ACM_OPENA;
  6352.  
  6353.  
  6354.   {$EXTERNALSYM ACM_PLAY}
  6355.   ACM_PLAY                = WM_USER + 101;
  6356.   {$EXTERNALSYM ACM_STOP}
  6357.   ACM_STOP                = WM_USER + 102;
  6358.  
  6359.   {$EXTERNALSYM ACN_START}
  6360.   ACN_START               = 1;
  6361.   {$EXTERNALSYM ACN_STOP}
  6362.   ACN_STOP                = 2;
  6363.  
  6364. {$EXTERNALSYM Animate_Create}
  6365. function Animate_Create(hwndP: HWND; id: HMENU; dwStyle: DWORD; hInstance: HINST): HWND;
  6366. {$EXTERNALSYM Animate_Open}
  6367. function Animate_Open(hwnd: HWND; szName: PChar): BOOL;
  6368. {$EXTERNALSYM Animate_OpenEx}
  6369. function Animate_OpenEx(hwnd: HWND; hInst: HINST; szName: PChar): BOOL;
  6370. {$EXTERNALSYM Animate_Play}
  6371. function Animate_Play(hwnd: HWND; from, _to: Word; rep: UINT): BOOL;
  6372. {$EXTERNALSYM Animate_Stop}
  6373. function Animate_Stop(hwnd: HWND): BOOL;
  6374. {$EXTERNALSYM Animate_Close}
  6375. function Animate_Close(hwnd: HWND): BOOL;
  6376. {$EXTERNALSYM Animate_Seek}
  6377. function Animate_Seek(hwnd: HWND; frame: Word): BOOL;
  6378.  
  6379. { ====== MONTHCAL CONTROL ========= }
  6380.  
  6381. const
  6382.   {$EXTERNALSYM MONTHCAL_CLASS}
  6383.   MONTHCAL_CLASS          = 'SysMonthCal32';
  6384.  
  6385. const  
  6386.   // Message constants
  6387.   {$EXTERNALSYM MCM_FIRST}
  6388.   MCM_FIRST             = $1000;
  6389.   {$EXTERNALSYM MCM_GETCURSEL}
  6390.   MCM_GETCURSEL         = MCM_FIRST + 1;
  6391.   {$EXTERNALSYM MCM_SETCURSEL}
  6392.   MCM_SETCURSEL         = MCM_FIRST + 2;
  6393.   {$EXTERNALSYM MCM_GETMAXSELCOUNT}
  6394.   MCM_GETMAXSELCOUNT    = MCM_FIRST + 3;
  6395.   {$EXTERNALSYM MCM_SETMAXSELCOUNT}
  6396.   MCM_SETMAXSELCOUNT    = MCM_FIRST + 4;
  6397.   {$EXTERNALSYM MCM_GETSELRANGE}
  6398.   MCM_GETSELRANGE       = MCM_FIRST + 5;
  6399.   {$EXTERNALSYM MCM_SETSELRANGE}
  6400.   MCM_SETSELRANGE       = MCM_FIRST + 6;
  6401.   {$EXTERNALSYM MCM_GETMONTHRANGE}
  6402.   MCM_GETMONTHRANGE     = MCM_FIRST + 7;
  6403.   {$EXTERNALSYM MCM_SETDAYSTATE}
  6404.   MCM_SETDAYSTATE       = MCM_FIRST + 8;
  6405.   {$EXTERNALSYM MCM_GETMINREQRECT}
  6406.   MCM_GETMINREQRECT     = MCM_FIRST + 9;
  6407.   {$EXTERNALSYM MCM_SETCOLOR}
  6408.   MCM_SETCOLOR          = MCM_FIRST + 10;
  6409.   {$EXTERNALSYM MCM_GETCOLOR}
  6410.   MCM_GETCOLOR          = MCM_FIRST + 11;
  6411.   {$EXTERNALSYM MCM_SETTODAY}
  6412.   MCM_SETTODAY          = MCM_FIRST + 12;
  6413.   {$EXTERNALSYM MCM_GETTODAY}
  6414.   MCM_GETTODAY          = MCM_FIRST + 13;
  6415.   {$EXTERNALSYM MCM_HITTEST}
  6416.   MCM_HITTEST           = MCM_FIRST + 14;
  6417.   {$EXTERNALSYM MCM_SETFIRSTDAYOFWEEK}
  6418.   MCM_SETFIRSTDAYOFWEEK = MCM_FIRST + 15;
  6419.   {$EXTERNALSYM MCM_GETFIRSTDAYOFWEEK}
  6420.   MCM_GETFIRSTDAYOFWEEK = MCM_FIRST + 16;
  6421.   {$EXTERNALSYM MCM_GETRANGE}
  6422.   MCM_GETRANGE          = MCM_FIRST + 17;
  6423.   {$EXTERNALSYM MCM_SETRANGE}
  6424.   MCM_SETRANGE          = MCM_FIRST + 18;
  6425.   {$EXTERNALSYM MCM_GETMONTHDELTA}
  6426.   MCM_GETMONTHDELTA     = MCM_FIRST + 19;
  6427.   {$EXTERNALSYM MCM_SETMONTHDELTA}
  6428.   MCM_SETMONTHDELTA     = MCM_FIRST + 20;
  6429.   {$EXTERNALSYM MCM_GETMAXTODAYWIDTH}
  6430.   MCM_GETMAXTODAYWIDTH  = MCM_FIRST + 21;
  6431.   {$EXTERNALSYM MCM_SETUNICODEFORMAT}
  6432.   MCM_SETUNICODEFORMAT  = CCM_SETUNICODEFORMAT;
  6433.   {$EXTERNALSYM MCM_GETUNICODEFORMAT}
  6434.   MCM_GETUNICODEFORMAT  = CCM_GETUNICODEFORMAT;
  6435.  
  6436.   // Hit test flags
  6437.   {$EXTERNALSYM MCHT_TITLE}
  6438.   MCHT_TITLE            = $00010000;
  6439.   {$EXTERNALSYM MCHT_CALENDAR}
  6440.   MCHT_CALENDAR         = $00020000;
  6441.   {$EXTERNALSYM MCHT_TODAYLINK}
  6442.   MCHT_TODAYLINK        = $00030000;
  6443.   {$EXTERNALSYM MCHT_NEXT}
  6444.   MCHT_NEXT             = $01000000;  // these indicate that hitting
  6445.   {$EXTERNALSYM MCHT_PREV}
  6446.   MCHT_PREV             = $02000000;  // here will go to the next/prev month
  6447.   {$EXTERNALSYM MCHT_NOWHERE}
  6448.   MCHT_NOWHERE          = $00000000;
  6449.   {$EXTERNALSYM MCHT_TITLEBK}
  6450.   MCHT_TITLEBK          = MCHT_TITLE;
  6451.   {$EXTERNALSYM MCHT_TITLEMONTH}
  6452.   MCHT_TITLEMONTH       = MCHT_TITLE or $0001;
  6453.   {$EXTERNALSYM MCHT_TITLEYEAR}
  6454.   MCHT_TITLEYEAR        = MCHT_TITLE or $0002;
  6455.   {$EXTERNALSYM MCHT_TITLEBTNNEXT}
  6456.   MCHT_TITLEBTNNEXT     = MCHT_TITLE or MCHT_NEXT or $0003;
  6457.   {$EXTERNALSYM MCHT_TITLEBTNPREV}
  6458.   MCHT_TITLEBTNPREV     = MCHT_TITLE or MCHT_PREV or $0003;
  6459.   {$EXTERNALSYM MCHT_CALENDARBK}
  6460.   MCHT_CALENDARBK       = MCHT_CALENDAR;
  6461.   {$EXTERNALSYM MCHT_CALENDARDATE}
  6462.   MCHT_CALENDARDATE     = MCHT_CALENDAR or $0001;
  6463.   {$EXTERNALSYM MCHT_CALENDARDATENEXT}
  6464.   MCHT_CALENDARDATENEXT = MCHT_CALENDARDATE or MCHT_NEXT;
  6465.   {$EXTERNALSYM MCHT_CALENDARDATEPREV}
  6466.   MCHT_CALENDARDATEPREV = MCHT_CALENDARDATE or MCHT_PREV;
  6467.   {$EXTERNALSYM MCHT_CALENDARDAY}
  6468.   MCHT_CALENDARDAY      = MCHT_CALENDAR or $0002;
  6469.   {$EXTERNALSYM MCHT_CALENDARWEEKNUM}
  6470.   MCHT_CALENDARWEEKNUM  = MCHT_CALENDAR or $0003;
  6471.  
  6472.   // Color codes
  6473.   {$EXTERNALSYM MCSC_BACKGROUND}
  6474.   MCSC_BACKGROUND       = 0;   // the background color (between months)
  6475.   {$EXTERNALSYM MCSC_TEXT}
  6476.   MCSC_TEXT             = 1;   // the dates
  6477.   {$EXTERNALSYM MCSC_TITLEBK}
  6478.   MCSC_TITLEBK          = 2;   // background of the title
  6479.   {$EXTERNALSYM MCSC_TITLETEXT}
  6480.   MCSC_TITLETEXT        = 3;
  6481.   {$EXTERNALSYM MCSC_MONTHBK}
  6482.   MCSC_MONTHBK          = 4;   // background within the month cal
  6483.   {$EXTERNALSYM MCSC_TRAILINGTEXT}
  6484.   MCSC_TRAILINGTEXT     = 5;   // the text color of header & trailing days
  6485.  
  6486.   // Notification codes
  6487.   {$EXTERNALSYM MCN_SELCHANGE}
  6488.   MCN_SELCHANGE         = MCN_FIRST + 1;
  6489.   {$EXTERNALSYM MCN_GETDAYSTATE}
  6490.   MCN_GETDAYSTATE       = MCN_FIRST + 3;
  6491.   {$EXTERNALSYM MCN_SELECT}
  6492.   MCN_SELECT            = MCN_FIRST + 4;
  6493.  
  6494.   // Style flags
  6495.   {$EXTERNALSYM MCS_DAYSTATE}
  6496.   MCS_DAYSTATE          = $0001;
  6497.   {$EXTERNALSYM MCS_MULTISELECT}
  6498.   MCS_MULTISELECT       = $0002;
  6499.   {$EXTERNALSYM MCS_WEEKNUMBERS}
  6500.   MCS_WEEKNUMBERS       = $0004;
  6501.   MCS_NOTODAY_PRE_IE4   = $0008;
  6502.   {$EXTERNALSYM MCS_NOTODAYCIRCLE}
  6503.   MCS_NOTODAYCIRCLE     = $0008;
  6504.   {$EXTERNALSYM MCS_NOTODAY}
  6505.   MCS_NOTODAY           = $0010;
  6506.  
  6507.   {$EXTERNALSYM GMR_VISIBLE}
  6508.   GMR_VISIBLE           = 0;       // visible portion of display
  6509.   {$EXTERNALSYM GMR_DAYSTATE}
  6510.   GMR_DAYSTATE          = 1;       // above plus the grayed out parts of
  6511.                                    // partially displayed months
  6512.                                    
  6513. type
  6514.   // bit-packed array of "bold" info for a month
  6515.   // if a bit is on, that day is drawn bold
  6516.   {$EXTERNALSYM MONTHDAYSTATE}
  6517.   MONTHDAYSTATE = DWORD;
  6518.   PMonthDayState = ^TMonthDayState;
  6519.   TMonthDayState = MONTHDAYSTATE;
  6520.  
  6521.   {$EXTERNALSYM MCHITTESTINFO}
  6522.   MCHITTESTINFO = packed record
  6523.     cbSize: UINT;
  6524.     pt: TPoint;
  6525.     uHit: UINT;      // out param
  6526.     st: TSystemTime;
  6527.   end;
  6528.   PMCHitTestInfo = ^TMCHitTestInfo;
  6529.   TMCHitTestInfo = MCHITTESTINFO;
  6530.  
  6531.   // MCN_SELCHANGE is sent whenever the currently displayed date changes
  6532.   // via month change, year change, keyboard navigation, prev/next button
  6533.   {$EXTERNALSYM tagNMSELCHANGE}
  6534.   tagNMSELCHANGE = packed record
  6535.     nmhdr: TNmHdr;  // this must be first, so we don't break WM_NOTIFY
  6536.     stSelStart: TSystemTime;
  6537.     stSelEnd: TSystemTime;
  6538.   end;
  6539.   PNMSelChange = ^TNMSelChange;
  6540.   TNMSelChange = tagNMSELCHANGE;
  6541.  
  6542.   // MCN_GETDAYSTATE is sent for MCS_DAYSTATE controls whenever new daystate
  6543.   // information is needed (month or year scroll) to draw bolding information.
  6544.   // The app must fill in cDayState months worth of information starting from
  6545.   // stStart date. The app may fill in the array at prgDayState or change
  6546.   // prgDayState to point to a different array out of which the information
  6547.   // will be copied. (similar to tooltips)
  6548.   {$EXTERNALSYM tagNMDAYSTATE}
  6549.   tagNMDAYSTATE = packed record
  6550.     nmhdr: TNmHdr;  // this must be first, so we don't break WM_NOTIFY
  6551.     stStart: TSystemTime;
  6552.     cDayState: Integer;
  6553.     prgDayState: PMonthDayState; // points to cDayState TMONTHDAYSTATEs
  6554.   end;
  6555.   PNMDayState = ^TNMDayState;
  6556.   TNMDayState = tagNMDAYSTATE;
  6557.  
  6558.   // MCN_SELECT is sent whenever a selection has occured (via mouse or keyboard)
  6559.   {$EXTERNALSYM NMSELECT}
  6560.   NMSELECT = tagNMSELCHANGE;
  6561.   PNMSelect = ^TNMSelect;
  6562.   TNMSelect = NMSELECT;
  6563.  
  6564. //   returns FALSE if MCS_MULTISELECT
  6565. //   returns TRUE and sets *pst to the currently selected date otherwise
  6566. {$EXTERNALSYM MonthCal_GetCurSel}
  6567. function MonthCal_GetCurSel(hmc: HWND; var pst: TSystemTime): BOOL;
  6568.  
  6569. //   returns FALSE if MCS_MULTISELECT
  6570. //   returns TURE and sets the currently selected date to *pst otherwise
  6571. {$EXTERNALSYM MonthCal_SetCurSel}
  6572. function MonthCal_SetCurSel(hmc: HWND; const pst: TSystemTime): BOOL;
  6573.  
  6574. //   returns the maximum number of selectable days allowed
  6575. {$EXTERNALSYM MonthCal_GetMaxSelCount}
  6576. function MonthCal_GetMaxSelCount(hmc: HWND): DWORD;
  6577.  
  6578. //   sets the max number days that can be selected iff MCS_MULTISELECT
  6579. {$EXTERNALSYM MonthCal_SetMaxSelCount}
  6580. function MonthCal_SetMaxSelCount(hmc: HWND; n: UINT): BOOL;
  6581.  
  6582. //   sets rgst[0] to the first day of the selection range
  6583. //   sets rgst[1] to the last day of the selection range
  6584. {$EXTERNALSYM MonthCal_GetSelRange}
  6585. function MonthCal_GetSelRange(hmc: HWND; rgst: PSystemTime): BOOL;
  6586.  
  6587. //   selects the range of days from rgst[0] to rgst[1]
  6588. {$EXTERNALSYM MonthCal_SetSelRange}
  6589. function MonthCal_SetSelRange(hmc: HWND; rgst: PSystemTime): BOOL;
  6590.  
  6591. //   if rgst specified, sets rgst[0] to the starting date and
  6592. //      and rgst[1] to the ending date of the the selectable (non-grayed)
  6593. //      days if GMR_VISIBLE or all the displayed days (including grayed)
  6594. //      if GMR_DAYSTATE.
  6595. //   returns the number of months spanned by the above range.
  6596. {$EXTERNALSYM MonthCal_GetMonthRange}
  6597. function MonthCal_GetMonthRange(hmc: HWND; gmr: DWORD; rgst: PSystemTime): DWORD;
  6598.  
  6599. //   cbds is the count of DAYSTATE items in rgds and it must be equal
  6600. //   to the value returned from MonthCal_GetMonthRange(hmc, GMR_DAYSTATE, NULL)
  6601. //   This sets the DAYSTATE bits for each month (grayed and non-grayed
  6602. //   days) displayed in the calendar. The first bit in a month's DAYSTATE
  6603. //   corresponts to bolding day 1, the second bit affects day 2, etc.
  6604. {$EXTERNALSYM MonthCal_SetDayState}
  6605. function MonthCal_SetDayState(hmc: HWND; cbds: Integer; const rgds: TNMDayState): BOOL;
  6606.  
  6607. //   sets prc the minimal size needed to display one month
  6608. {$EXTERNALSYM MonthCal_GetMinReqRect}
  6609. function MonthCal_GetMinReqRect(hmc: HWND; var prc: TRect): BOOL;
  6610.  
  6611. // set what day is "today"   send NULL to revert back to real date
  6612. {$EXTERNALSYM MonthCal_SetToday}
  6613. function MonthCal_SetToday(hmc: HWND; const pst: TSystemTime): BOOL;
  6614.  
  6615. // get what day is "today"
  6616. // returns BOOL for success/failure
  6617. {$EXTERNALSYM MonthCal_GetToday}
  6618. function MonthCal_GetToday(hmc: HWND; var pst: TSystemTime): BOOL;
  6619.  
  6620. // determine what pinfo->pt is over
  6621. {$EXTERNALSYM MonthCal_HitTest}
  6622. function MonthCal_HitTest(hmc: HWND; var info: TMCHitTestInfo): DWORD;
  6623.  
  6624. // set colors to draw control with -- see MCSC_ bits below
  6625. {$EXTERNALSYM MonthCal_SetColor}
  6626. function MonthCal_SetColor(hmc: HWND; iColor: Integer; clr: TColorRef): TColorRef;
  6627.  
  6628. {$EXTERNALSYM MonthCal_GetColor}
  6629. function MonthCal_GetColor(hmc: HWND; iColor: Integer): TColorRef;
  6630.  
  6631. // set first day of week to iDay:
  6632. // 0 for Monday, 1 for Tuesday, ..., 6 for Sunday
  6633. // -1 for means use locale info
  6634. {$EXTERNALSYM MonthCal_SetFirstDayOfWeek}
  6635. function MonthCal_SetFirstDayOfWeek(hmc: HWND; iDay: Integer): Integer;
  6636.  
  6637. // DWORD result...  low word has the day.  high word is bool if this is app set
  6638. // or not (FALSE == using locale info)
  6639. {$EXTERNALSYM MonthCal_GetFirstDayOfWeek}
  6640. function MonthCal_GetFirstDayOfWeek(hmc: HWND): Integer;
  6641.  
  6642. //   modifies rgst[0] to be the minimum ALLOWABLE systemtime (or 0 if no minimum)
  6643. //   modifies rgst[1] to be the maximum ALLOWABLE systemtime (or 0 if no maximum)
  6644. //   returns GDTR_MIN|GDTR_MAX if there is a minimum|maximum limit
  6645. {$EXTERNALSYM MonthCal_GetRange}
  6646. function MonthCal_GetRange(hmc: HWND; rgst: PSystemTime): DWORD;
  6647.  
  6648. //   if GDTR_MIN, sets the minimum ALLOWABLE systemtime to rgst[0], otherwise removes minimum
  6649. //   if GDTR_MAX, sets the maximum ALLOWABLE systemtime to rgst[1], otherwise removes maximum
  6650. //   returns TRUE on success, FALSE on error (such as invalid parameters)
  6651. {$EXTERNALSYM Monthcal_SetRange}
  6652. function Monthcal_SetRange(hmc: HWND; gdtr: DWORD; rgst: PSystemTime): BOOL;
  6653.  
  6654. //   returns the number of months one click on a next/prev button moves by
  6655. {$EXTERNALSYM MonthCal_GetMonthDelta}
  6656. function MonthCal_GetMonthDelta(hmc: HWND): Integer;
  6657.  
  6658. //   sets the month delta to n. n = 0 reverts to moving by a page of months
  6659. //   returns the previous value of n.
  6660. {$EXTERNALSYM MonthCal_SetMonthDelta}
  6661. function MonthCal_SetMonthDelta(hmc: HWND; n: Integer): Integer;
  6662.  
  6663. //   sets *psz to the maximum width/height of the "Today" string displayed
  6664. //   at the bottom of the calendar (as long as MCS_NOTODAY is not specified)
  6665. {$EXTERNALSYM MonthCal_GetMaxTodayWidth}
  6666. function MonthCal_GetMaxTodayWidth(hmc: HWND): DWORD;
  6667.  
  6668. {$EXTERNALSYM MonthCal_SetUnicodeFormat}
  6669. function MonthCal_SetUnicodeFormat(hwnd: HWND; fUnicode: BOOL): BOOL;
  6670.  
  6671. {$EXTERNALSYM MonthCal_GetUnicodeFormat}
  6672. function MonthCal_GetUnicodeFormat(hwnd: HWND): BOOL;
  6673.  
  6674. { ====== DATETIMEPICK CONTROL =============== }
  6675.  
  6676. const
  6677.   {$EXTERNALSYM DATETIMEPICK_CLASS}
  6678.   DATETIMEPICK_CLASS = 'SysDateTimePick32';
  6679.  
  6680.   // Message constants
  6681.   {$EXTERNALSYM DTM_FIRST}
  6682.   DTM_FIRST         = $1000;
  6683.   {$EXTERNALSYM DTM_GETSYSTEMTIME}
  6684.   DTM_GETSYSTEMTIME = DTM_FIRST + 1;
  6685.   {$EXTERNALSYM DTM_SETSYSTEMTIME}
  6686.   DTM_SETSYSTEMTIME = DTM_FIRST + 2;
  6687.   {$EXTERNALSYM DTM_GETRANGE}
  6688.   DTM_GETRANGE      = DTM_FIRST + 3;
  6689.   {$EXTERNALSYM DTM_SETRANGE}
  6690.   DTM_SETRANGE      = DTM_FIRST + 4;
  6691.   {$EXTERNALSYM DTM_SETFORMATA}
  6692.   DTM_SETFORMATA    = DTM_FIRST + 5;
  6693.   {$EXTERNALSYM DTM_SETMCCOLOR}
  6694.   DTM_SETMCCOLOR    = DTM_FIRST + 6;
  6695.   {$EXTERNALSYM DTM_GETMCCOLOR}
  6696.   DTM_GETMCCOLOR    = DTM_FIRST + 7;
  6697.   {$EXTERNALSYM DTM_GETMONTHCAL}
  6698.   DTM_GETMONTHCAL   = DTM_FIRST + 8;
  6699.   {$EXTERNALSYM DTM_SETMCFONT}
  6700.   DTM_SETMCFONT     = DTM_FIRST + 9;
  6701.   {$EXTERNALSYM DTM_GETMCFONT}
  6702.   DTM_GETMCFONT     = DTM_FIRST + 10;
  6703.   {$EXTERNALSYM DTM_SETFORMATW}
  6704.   DTM_SETFORMATW    = DTM_FIRST + 50;
  6705.   {$EXTERNALSYM DTM_SETFORMAT}
  6706.   DTM_SETFORMAT     = DTM_SETFORMATA;
  6707.  
  6708.   // Style Flags
  6709.   {$EXTERNALSYM DTS_UPDOWN}
  6710.   DTS_UPDOWN          = $0001;  // use UPDOWN instead of MONTHCAL
  6711.   {$EXTERNALSYM DTS_SHOWNONE}
  6712.   DTS_SHOWNONE        = $0002;  // allow a NONE selection
  6713.   {$EXTERNALSYM DTS_SHORTDATEFORMAT}
  6714.   DTS_SHORTDATEFORMAT = $0000;  // use the short date format
  6715.                                 // (app must forward WM_WININICHANGE messages)
  6716.   {$EXTERNALSYM DTS_LONGDATEFORMAT}
  6717.   DTS_LONGDATEFORMAT  = $0004;  // use the long date format
  6718.                                 // (app must forward WM_WININICHANGE messages)
  6719.   {$EXTERNALSYM DTS_TIMEFORMAT}
  6720.   DTS_TIMEFORMAT      = $0009;  // use the time format
  6721.                                 // (app must forward WM_WININICHANGE messages)
  6722.   {$EXTERNALSYM DTS_APPCANPARSE}
  6723.   DTS_APPCANPARSE     = $0010;  // allow user entered strings
  6724.                                 // (app MUST respond to DTN_USERSTRING)
  6725.   {$EXTERNALSYM DTS_RIGHTALIGN}
  6726.   DTS_RIGHTALIGN      = $0020;  // right-align popup instead of left-align it
  6727.  
  6728.   // Notification codes
  6729.   {$EXTERNALSYM DTN_DATETIMECHANGE}
  6730.   DTN_DATETIMECHANGE = DTN_FIRST + 1;  // the systemtime has changed
  6731.   {$EXTERNALSYM DTN_USERSTRINGA}
  6732.   DTN_USERSTRINGA    = DTN_FIRST + 2;  // the user has entered a string
  6733.   {$EXTERNALSYM DTN_USERSTRINGW}
  6734.   DTN_USERSTRINGW    = DTN_FIRST + 15;
  6735.   {$EXTERNALSYM DTN_WMKEYDOWNA}
  6736.   DTN_WMKEYDOWNA     = DTN_FIRST + 3;  // modify keydown on app format field (X)
  6737.   {$EXTERNALSYM DTN_WMKEYDOWNW}
  6738.   DTN_WMKEYDOWNW     = DTN_FIRST + 16;
  6739.   {$EXTERNALSYM DTN_FORMATA}
  6740.   DTN_FORMATA        = DTN_FIRST + 4;  // query display for app format field (X)
  6741.   {$EXTERNALSYM DTN_FORMATW}
  6742.   DTN_FORMATW        = DTN_FIRST + 17;
  6743.   {$EXTERNALSYM DTN_FORMATQUERYA}
  6744.   DTN_FORMATQUERYA   = DTN_FIRST + 5;  // query formatting info for app format field (X)
  6745.   {$EXTERNALSYM DTN_FORMATQUERYW}
  6746.   DTN_FORMATQUERYW   = DTN_FIRST + 18;
  6747.   {$EXTERNALSYM DTN_DROPDOWN}
  6748.   DTN_DROPDOWN       = DTN_FIRST + 6;  // MonthCal has dropped down
  6749.   {$EXTERNALSYM DTN_CLOSEUP}
  6750.   DTN_CLOSEUP        = DTN_FIRST + 7;  // MonthCal is popping up
  6751.  
  6752.  
  6753.  
  6754.  
  6755.  
  6756.  
  6757.  
  6758.  
  6759.  
  6760.  
  6761.   {$EXTERNALSYM DTN_USERSTRING}
  6762.   DTN_USERSTRING     = DTN_USERSTRINGA;
  6763.   {$EXTERNALSYM DTN_WMKEYDOWN}
  6764.   DTN_WMKEYDOWN      = DTN_WMKEYDOWNA;
  6765.   {$EXTERNALSYM DTN_FORMAT}
  6766.   DTN_FORMAT         = DTN_FORMATA;
  6767.   {$EXTERNALSYM DTN_FORMATQUERY}
  6768.   DTN_FORMATQUERY    = DTN_FORMATQUERYA;
  6769.  
  6770.  
  6771.   // Ranges
  6772.   {$EXTERNALSYM GDTR_MIN}
  6773.   GDTR_MIN = $0001;
  6774.   {$EXTERNALSYM GDTR_MAX}
  6775.   GDTR_MAX = $0002;
  6776.  
  6777.   // Return Values
  6778.   {$EXTERNALSYM GDT_ERROR}
  6779.   GDT_ERROR = -1;
  6780.   {$EXTERNALSYM GDT_VALID}
  6781.   GDT_VALID = 0;
  6782.   {$EXTERNALSYM GDT_NONE}
  6783.   GDT_NONE  = 1;
  6784.  
  6785. type
  6786.   {$EXTERNALSYM tagNMDATETIMECHANGE}
  6787.   tagNMDATETIMECHANGE = packed record
  6788.     nmhdr: TNmHdr;
  6789.     dwFlags: DWORD;         // GDT_VALID or GDT_NONE
  6790.     st: TSystemTime;        // valid iff dwFlags = GDT_VALID
  6791.   end;
  6792.   PNMDateTimeChange = ^TNMDateTimeChange;
  6793.   TNMDateTimeChange = tagNMDATETIMECHANGE;
  6794.  
  6795.   {$EXTERNALSYM tagNMDATETIMESTRINGA}
  6796.   tagNMDATETIMESTRINGA = packed record
  6797.     nmhdr: TNmHdr;
  6798.     pszUserString: PAnsiChar;     // string user entered
  6799.     st: TSystemTime;           // app fills this in
  6800.     dwFlags: DWORD;            // GDT_VALID or GDT_NONE
  6801.   end;
  6802.   {$EXTERNALSYM tagNMDATETIMESTRINGW}
  6803.   tagNMDATETIMESTRINGW = packed record
  6804.     nmhdr: TNmHdr;
  6805.     pszUserString: PWideChar;     // string user entered
  6806.     st: TSystemTime;           // app fills this in
  6807.     dwFlags: DWORD;            // GDT_VALID or GDT_NONE
  6808.   end;
  6809.   {$EXTERNALSYM tagNMDATETIMESTRING}
  6810.   tagNMDATETIMESTRING = tagNMDATETIMESTRINGA;
  6811.   PNMDateTimeStringA = ^TNMDateTimeStringA;
  6812.   PNMDateTimeStringW = ^TNMDateTimeStringW;
  6813.   PNMDateTimeString = PNMDateTimeStringA;
  6814.   TNMDateTimeStringA = tagNMDATETIMESTRINGA;
  6815.   TNMDateTimeStringW = tagNMDATETIMESTRINGW;
  6816.   TNMDateTimeString = TNMDateTimeStringA;
  6817.  
  6818.   {$EXTERNALSYM tagNMDATETIMEWMKEYDOWNA}
  6819.   tagNMDATETIMEWMKEYDOWNA = packed record
  6820.     nmhdr: TNmHdr;
  6821.     nVirtKey: Integer; // virtual key code of WM_KEYDOWN which MODIFIES an X field
  6822.     pszFormat: PAnsiChar; // format substring
  6823.     st: TSystemTime;   // current systemtime, app should modify based on key
  6824.   end;
  6825.   {$EXTERNALSYM tagNMDATETIMEWMKEYDOWNW}
  6826.   tagNMDATETIMEWMKEYDOWNW = packed record
  6827.     nmhdr: TNmHdr;
  6828.     nVirtKey: Integer; // virtual key code of WM_KEYDOWN which MODIFIES an X field
  6829.     pszFormat: PWideChar; // format substring
  6830.     st: TSystemTime;   // current systemtime, app should modify based on key
  6831.   end;
  6832.   {$EXTERNALSYM tagNMDATETIMEWMKEYDOWN}
  6833.   tagNMDATETIMEWMKEYDOWN = tagNMDATETIMEWMKEYDOWNA;
  6834.   PNMDateTimeWMKeyDownA = ^TNMDateTimeWMKeyDownA;
  6835.   PNMDateTimeWMKeyDownW = ^TNMDateTimeWMKeyDownW;
  6836.   PNMDateTimeWMKeyDown = PNMDateTimeWMKeyDownA;
  6837.   TNMDateTimeWMKeyDownA = tagNMDATETIMEWMKEYDOWNA;
  6838.   TNMDateTimeWMKeyDownW = tagNMDATETIMEWMKEYDOWNW;
  6839.   TNMDateTimeWMKeyDown = TNMDateTimeWMKeyDownA;
  6840.  
  6841.   {$EXTERNALSYM tagNMDATETIMEFORMATA}
  6842.   tagNMDATETIMEFORMATA = packed record
  6843.     nmhdr: TNmHdr;
  6844.     pszFormat: PAnsiChar;                // format substring
  6845.     st: TSystemTime;                  // current systemtime
  6846.     pszDisplay: PAnsiChar;               // string to display
  6847.     szDisplay: array[0..63] of AnsiChar; // buffer pszDisplay originally points at
  6848.   end;
  6849.   {$EXTERNALSYM tagNMDATETIMEFORMATW}
  6850.   tagNMDATETIMEFORMATW = packed record
  6851.     nmhdr: TNmHdr;
  6852.     pszFormat: PWideChar;                // format substring
  6853.     st: TSystemTime;                  // current systemtime
  6854.     pszDisplay: PWideChar;               // string to display
  6855.     szDisplay: array[0..63] of WideChar; // buffer pszDisplay originally points at
  6856.   end;
  6857.   {$EXTERNALSYM tagNMDATETIMEFORMAT}
  6858.   tagNMDATETIMEFORMAT = tagNMDATETIMEFORMATA;
  6859.   PNMDateTimeFormatA = ^TNMDateTimeFormatA;
  6860.   PNMDateTimeFormatW = ^TNMDateTimeFormatW;
  6861.   PNMDateTimeFormat = PNMDateTimeFormatA;
  6862.   TNMDateTimeFormatA = tagNMDATETIMEFORMATA;
  6863.   TNMDateTimeFormatW = tagNMDATETIMEFORMATW;
  6864.   TNMDateTimeFormat = TNMDateTimeFormatA;
  6865.  
  6866.   {$EXTERNALSYM tagNMDATETIMEFORMATQUERYA}
  6867.   tagNMDATETIMEFORMATQUERYA = packed record
  6868.     nmhdr: TNmHdr;
  6869.     pszFormat: PAnsiChar; // format substring
  6870.     szMax: TSize;      // max bounding rectangle app will use for this format string
  6871.   end;
  6872.   {$EXTERNALSYM tagNMDATETIMEFORMATQUERYW}
  6873.   tagNMDATETIMEFORMATQUERYW = packed record
  6874.     nmhdr: TNmHdr;
  6875.     pszFormat: PWideChar; // format substring
  6876.     szMax: TSize;      // max bounding rectangle app will use for this format string
  6877.   end;
  6878.   {$EXTERNALSYM tagNMDATETIMEFORMATQUERY}
  6879.   tagNMDATETIMEFORMATQUERY = tagNMDATETIMEFORMATQUERYA;
  6880.   PNMDateTimeFormatQueryA = ^TNMDateTimeFormatQueryA;
  6881.   PNMDateTimeFormatQueryW = ^TNMDateTimeFormatQueryW;
  6882.   PNMDateTimeFormatQuery = PNMDateTimeFormatQueryA;
  6883.   TNMDateTimeFormatQueryA = tagNMDATETIMEFORMATQUERYA;
  6884.   TNMDateTimeFormatQueryW = tagNMDATETIMEFORMATQUERYW;
  6885.   TNMDateTimeFormatQuery = TNMDateTimeFormatQueryA;
  6886.  
  6887. //   returns GDT_NONE if "none" is selected (DTS_SHOWNONE only)
  6888. //   returns GDT_VALID and modifies pst to be the currently selected value
  6889. {$EXTERNALSYM DateTime_GetSystemTime}
  6890. function DateTime_GetSystemTime(hdp: HWND; var pst: TSystemTime): DWORD;
  6891.  
  6892. //   if gd = GDT_NONE, sets datetimepick to None (DTS_SHOWNONE only)
  6893. //   if gd = GDT_VALID, sets datetimepick to pst
  6894. //   returns TRUE on success, FALSE on error (such as bad params)
  6895. {$EXTERNALSYM DateTime_SetSystemTime}
  6896. function DateTime_SetSystemTime(hdp: HWND; gd: DWORD; const pst: TSystemTime): BOOL;
  6897.  
  6898. //   modifies rgst[0] to be the minimum ALLOWABLE systemtime (or 0 if no minimum)
  6899. //   modifies rgst[1] to be the maximum ALLOWABLE systemtime (or 0 if no maximum)
  6900. //   returns GDTR_MIN or GDTR_MAX if there is a minimum or maximum limit
  6901. {$EXTERNALSYM DateTime_GetRange}
  6902. function DateTime_GetRange(hdp: HWND; rgst: PSystemTime): DWORD;
  6903.  
  6904. //   if GDTR_MIN, sets the minimum ALLOWABLE systemtime to rgst[0], otherwise removes minimum
  6905. //   if GDTR_MAX, sets the maximum ALLOWABLE systemtime to rgst[1], otherwise removes maximum
  6906. //   returns TRUE on success, FALSE on error (such as invalid parameters)
  6907. {$EXTERNALSYM DateTime_SetRange}
  6908. function DateTime_SetRange(hdp: HWND; gdtr: DWORD; rgst: PSystemTime): BOOL;
  6909.  
  6910. //   sets the display formatting string to sz (see GetDateFormat and GetTimeFormat for valid formatting chars)
  6911. //   NOTE: 'X' is a valid formatting character which indicates that the application
  6912. //   will determine how to display information. Such apps must support DTN_WMKEYDOWN,
  6913. //   DTN_FORMAT, and DTN_FORMATQUERY.
  6914. {$EXTERNALSYM DateTime_SetFormat}
  6915. function DateTime_SetFormat(hdp: HWND; sz: PChar): BOOL;
  6916. {$EXTERNALSYM DateTime_SetFormatA}
  6917. function DateTime_SetFormatA(hdp: HWND; sz: PAnsiChar): BOOL;
  6918. {$EXTERNALSYM DateTime_SetFormatW}
  6919. function DateTime_SetFormatW(hdp: HWND; sz: PWideChar): BOOL;
  6920.  
  6921. {$EXTERNALSYM DateTime_SetMonthCalColor}
  6922. function DateTime_SetMonthCalColor(hdp: HWND; iColor: DWORD; clr: TColorRef): TColorRef;
  6923.  
  6924. {$EXTERNALSYM DateTime_GetMonthCalColor}
  6925. function DateTime_GetMonthCalColor(hdp: HWND; iColor: DWORD): TColorRef;
  6926.  
  6927. // returns the HWND of the MonthCal popup window. Only valid
  6928. // between DTN_DROPDOWN and DTN_CLOSEUP notifications.
  6929. {$EXTERNALSYM DateTime_GetMonthCal}
  6930. function DateTime_GetMonthCal(hdp: HWND): HWND;
  6931.  
  6932. {$EXTERNALSYM DateTime_SetMonthCalFont}
  6933. procedure DateTime_SetMonthCalFont(hdp: HWND; hfont: HFONT; fRedraw: BOOL);
  6934.  
  6935. {$EXTERNALSYM DateTime_GetMonthCalFont}
  6936. function DateTime_GetMonthCalFont(hdp: HWND): HFONT;
  6937.  
  6938. {  ====================== IP Address edit control ============================= }
  6939.  
  6940. const
  6941.   {$EXTERNALSYM WC_IPADDRESS}
  6942.   WC_IPADDRESS         = 'SysIPAddress32';
  6943.  
  6944.   // Messages sent to IPAddress controls
  6945.   {$EXTERNALSYM IPM_CLEARADDRESS}
  6946.   IPM_CLEARADDRESS     = WM_USER+100;  { no parameters }
  6947.   {$EXTERNALSYM IPM_SETADDRESS}
  6948.   IPM_SETADDRESS       = WM_USER+101;  { lparam = TCP/IP address }
  6949.   {$EXTERNALSYM IPM_GETADDRESS}
  6950.   IPM_GETADDRESS       = WM_USER+102;  { lresult = # of non black fields.  lparam = LPDWORD for TCP/IP address }
  6951.   {$EXTERNALSYM IPM_SETRANGE}
  6952.   IPM_SETRANGE         = WM_USER+103;  { wparam = field, lparam = range }
  6953.   {$EXTERNALSYM IPM_SETFOCUS}
  6954.   IPM_SETFOCUS         = WM_USER+104;  { wparam = field }
  6955.   {$EXTERNALSYM IPM_ISBLANK}
  6956.   IPM_ISBLANK          = WM_USER+105;  { no parameters }
  6957.  
  6958.   {$EXTERNALSYM IPN_FIELDCHANGED}
  6959.   IPN_FIELDCHANGED     = IPN_FIRST - 0;
  6960.  
  6961. type
  6962.   {$EXTERNALSYM tagNMIPADDRESS}
  6963.   tagNMIPADDRESS = packed record
  6964.     hdr: NMHDR;
  6965.     iField: Integer;
  6966.     iValue: Integer;
  6967.   end;
  6968.   PNMIPAddress = ^TNMIPAddress;
  6969.   TNMIPAddress = tagNMIPADDRESS;
  6970.  
  6971. { The following is a useful macro for passing the range values in the }
  6972. { IPM_SETRANGE message. }
  6973. {$EXTERNALSYM MAKEIPRANGE}
  6974. function MAKEIPRANGE(low, high: Byte): LPARAM;
  6975.  
  6976. { And this is a useful macro for making the IP Address to be passed }
  6977. { as a LPARAM. }
  6978. {$EXTERNALSYM MAKEIPADDRESS}
  6979. function MAKEIPADDRESS(b1, b2, b3, b4: DWORD): LPARAM;
  6980.  
  6981. { Get individual number }
  6982. {$EXTERNALSYM FIRST_IPADDRESS}
  6983. function FIRST_IPADDRESS(x: DWORD): DWORD;
  6984.  
  6985. {$EXTERNALSYM SECOND_IPADDRESS}
  6986. function SECOND_IPADDRESS(x: DWORD): DWORD;
  6987.  
  6988. {$EXTERNALSYM THIRD_IPADDRESS}
  6989. function THIRD_IPADDRESS(x: DWORD): DWORD;
  6990.  
  6991. {$EXTERNALSYM FOURTH_IPADDRESS}
  6992. function FOURTH_IPADDRESS(x: DWORD): DWORD;
  6993.  
  6994. {  ====================== Pager Control ============================= }
  6995.  
  6996. const
  6997.   { Pager Class Name }
  6998.   {$EXTERNALSYM WC_PAGESCROLLER}
  6999.   WC_PAGESCROLLER               = 'SysPager';
  7000.  
  7001.   { Pager Control Styles }
  7002.   {$EXTERNALSYM PGS_VERT}
  7003.   PGS_VERT                    = $00000000;
  7004.   {$EXTERNALSYM PGS_HORZ}
  7005.   PGS_HORZ                    = $00000001;
  7006.   {$EXTERNALSYM PGS_AUTOSCROLL}
  7007.   PGS_AUTOSCROLL              = $00000002;
  7008.   {$EXTERNALSYM PGS_DRAGNDROP}
  7009.   PGS_DRAGNDROP               = $00000004;
  7010.  
  7011.   { Pager Button State }
  7012.   { The scroll can be in one of the following control State }
  7013.   {$EXTERNALSYM PGF_INVISIBLE}
  7014.   PGF_INVISIBLE        = 0;     { Scroll button is not visible }
  7015.   {$EXTERNALSYM PGF_NORMAL}
  7016.   PGF_NORMAL           = 1;     { Scroll button is in normal state }
  7017.   {$EXTERNALSYM PGF_GRAYED}
  7018.   PGF_GRAYED           = 2;     { Scroll button is in grayed state }
  7019.   {$EXTERNALSYM PGF_DEPRESSED}
  7020.   PGF_DEPRESSED        = 4;     { Scroll button is in depressed state }
  7021.   {$EXTERNALSYM PGF_HOT}
  7022.   PGF_HOT              = 8;     { Scroll button is in hot state }
  7023.  
  7024.   { The following identifiers specifies the button control }
  7025.   {$EXTERNALSYM PGB_TOPORLEFT}
  7026.   PGB_TOPORLEFT           = 0;
  7027.   {$EXTERNALSYM PGB_BOTTOMORRIGHT}
  7028.   PGB_BOTTOMORRIGHT       = 1;
  7029.  
  7030.   { Pager Control  Messages }
  7031.   {$EXTERNALSYM PGM_SETCHILD}
  7032.   PGM_SETCHILD                = PGM_FIRST + 1;   { lParam == hwnd }
  7033.   {$EXTERNALSYM PGM_RECALCSIZE}
  7034.   PGM_RECALCSIZE              = PGM_FIRST + 2;
  7035.   {$EXTERNALSYM PGM_FORWARDMOUSE}
  7036.   PGM_FORWARDMOUSE            = PGM_FIRST + 3;
  7037.   {$EXTERNALSYM PGM_SETBKCOLOR}
  7038.   PGM_SETBKCOLOR              = PGM_FIRST + 4;
  7039.   {$EXTERNALSYM PGM_GETBKCOLOR}
  7040.   PGM_GETBKCOLOR              = PGM_FIRST + 5;
  7041.   {$EXTERNALSYM PGM_SETBORDER}
  7042.   PGM_SETBORDER              = PGM_FIRST + 6;
  7043.   {$EXTERNALSYM PGM_GETBORDER}
  7044.   PGM_GETBORDER              = PGM_FIRST + 7;
  7045.   {$EXTERNALSYM PGM_SETPOS}
  7046.   PGM_SETPOS                  = PGM_FIRST + 8;
  7047.   {$EXTERNALSYM PGM_GETPOS}
  7048.   PGM_GETPOS                  = PGM_FIRST + 9;
  7049.   {$EXTERNALSYM PGM_SETBUTTONSIZE}
  7050.   PGM_SETBUTTONSIZE           = PGM_FIRST + 10;
  7051.   {$EXTERNALSYM PGM_GETBUTTONSIZE}
  7052.   PGM_GETBUTTONSIZE           = PGM_FIRST + 11;
  7053.   {$EXTERNALSYM PGM_GETBUTTONSTATE}
  7054.   PGM_GETBUTTONSTATE          = PGM_FIRST + 12;
  7055.   {$EXTERNALSYM PGM_GETDROPTARGET}
  7056.   PGM_GETDROPTARGET           = CCM_GETDROPTARGET;
  7057.  
  7058. {$EXTERNALSYM Pager_SetChild}
  7059. procedure Pager_SetChild(hwnd: HWND; hwndChild: HWND);
  7060. {$EXTERNALSYM Pager_RecalcSize}
  7061. procedure Pager_RecalcSize(hwnd: HWND);
  7062. {$EXTERNALSYM Pager_ForwardMouse}
  7063. procedure Pager_ForwardMouse(hwnd: HWND; bForward: BOOL);
  7064. {$EXTERNALSYM Pager_SetBkColor}
  7065. function Pager_SetBkColor(hwnd: HWND; clr: COLORREF): COLORREF;
  7066. {$EXTERNALSYM Pager_GetBkColor}
  7067. function Pager_GetBkColor(hwnd: HWND): COLORREF;
  7068. {$EXTERNALSYM Pager_SetBorder}
  7069. function Pager_SetBorder(hwnd: HWND; iBorder: Integer): Integer;
  7070. {$EXTERNALSYM Pager_GetBorder}
  7071. function Pager_GetBorder(hwnd: HWND): Integer;
  7072. {$EXTERNALSYM Pager_SetPos}
  7073. function Pager_SetPos(hwnd: HWND; iPos: Integer): Integer;
  7074. {$EXTERNALSYM Pager_GetPos}
  7075. function Pager_GetPos(hwnd: HWND): Integer;
  7076. {$EXTERNALSYM Pager_SetButtonSize}
  7077. function Pager_SetButtonSize(hwnd: HWND; iSize: Integer): Integer;
  7078. {$EXTERNALSYM Pager_GetButtonSize}
  7079. function Pager_GetButtonSize(hwnd: HWND): Integer;
  7080. {$EXTERNALSYM Pager_GetButtonState}
  7081. function Pager_GetButtonState(hwnd: HWND; iButton: Integer): DWORD;
  7082. {$EXTERNALSYM Pager_GetDropTarget}
  7083. procedure Pager_GetDropTarget(hwnd: HWND; ppdt: Pointer{!!});
  7084.  
  7085. const
  7086.   { Pager Control Notification Messages }
  7087.  
  7088.   { PGN_SCROLL Notification Message }
  7089.   {$EXTERNALSYM PGN_SCROLL}
  7090.   PGN_SCROLL              = PGN_FIRST-1;
  7091.  
  7092.   {$EXTERNALSYM PGF_SCROLLUP}
  7093.   PGF_SCROLLUP            = 1;
  7094.   {$EXTERNALSYM PGF_SCROLLDOWN}
  7095.   PGF_SCROLLDOWN          = 2;
  7096.   {$EXTERNALSYM PGF_SCROLLLEFT}
  7097.   PGF_SCROLLLEFT          = 4;
  7098.   {$EXTERNALSYM PGF_SCROLLRIGHT}
  7099.   PGF_SCROLLRIGHT         = 8;
  7100.  
  7101.   { Keys down }
  7102.   {$EXTERNALSYM PGK_SHIFT}
  7103.   PGK_SHIFT               = 1;
  7104.   {$EXTERNALSYM PGK_CONTROL}
  7105.   PGK_CONTROL             = 2;
  7106.   {$EXTERNALSYM PGK_MENU}
  7107.   PGK_MENU                = 4;
  7108.  
  7109. type
  7110.   { This structure is sent along with PGN_SCROLL notifications }
  7111.   {$EXTERNALSYM NMPGSCROLL}
  7112.   NMPGSCROLL = packed record
  7113.     hdr: NMHDR;
  7114.     fwKeys: Word;           { Specifies which keys are down when this notification is send }
  7115.     rcParent: TRect;        { Contains Parent Window Rect }
  7116.     iDir: Integer;          { Scrolling Direction }
  7117.     iXpos: Integer;         { Horizontal scroll position }
  7118.     iYpos: Integer;         { Vertical scroll position }
  7119.     iScroll: Integer;       { [in/out] Amount to scroll }
  7120.   end;
  7121.   PNMPGScroll = ^TNMPGScroll;
  7122.   TNMPGScroll = NMPGSCROLL;
  7123.  
  7124. const
  7125.   { PGN_CALCSIZE Notification Message }
  7126.   {$EXTERNALSYM PGN_CALCSIZE}
  7127.   PGN_CALCSIZE            = PGN_FIRST-2;
  7128.  
  7129.   {$EXTERNALSYM PGF_CALCWIDTH}
  7130.   PGF_CALCWIDTH           = 1;
  7131.   {$EXTERNALSYM PGF_CALCHEIGHT}
  7132.   PGF_CALCHEIGHT          = 2;
  7133.  
  7134. type
  7135.   {$EXTERNALSYM NMPGCALCSIZE}
  7136.   NMPGCALCSIZE = packed record
  7137.     hdr: NMHDR;
  7138.     dwFlag: DWORD;
  7139.     iWidth: Integer;
  7140.     iHeight: Integer;
  7141.   end;
  7142.   PNMPGCalcSize = ^TNMPGCalcSize;
  7143.   TNMPGCalcSize = NMPGCALCSIZE;
  7144.  
  7145. { ======================  Native Font Control ============================== }
  7146.  
  7147. const
  7148.   {$EXTERNALSYM WC_NATIVEFONTCTL}
  7149.   WC_NATIVEFONTCTL            = 'NativeFontCtl';
  7150.  
  7151.   { style definition }
  7152.   {$EXTERNALSYM NFS_EDIT}
  7153.   NFS_EDIT                    = $0001;
  7154.   {$EXTERNALSYM NFS_STATIC}
  7155.   NFS_STATIC                  = $0002;
  7156.   {$EXTERNALSYM NFS_LISTCOMBO}
  7157.   NFS_LISTCOMBO               = $0004;
  7158.   {$EXTERNALSYM NFS_BUTTON}
  7159.   NFS_BUTTON                  = $0008;
  7160.   {$EXTERNALSYM NFS_ALL}
  7161.   NFS_ALL                     = $0010;
  7162.  
  7163. { ====== TrackMouseEvent  ================================================== }
  7164.  
  7165. const
  7166.   {$EXTERNALSYM WM_MOUSEHOVER}
  7167.   WM_MOUSEHOVER                       = $02A1;
  7168.   {$EXTERNALSYM WM_MOUSELEAVE}
  7169.   WM_MOUSELEAVE                       = $02A3;
  7170.  
  7171.   {$EXTERNALSYM TME_HOVER}
  7172.   TME_HOVER           = $00000001;
  7173.   {$EXTERNALSYM TME_LEAVE}
  7174.   TME_LEAVE           = $00000002;
  7175.   {$EXTERNALSYM TME_QUERY}
  7176.   TME_QUERY           = $40000000;
  7177.   {$EXTERNALSYM TME_CANCEL}
  7178.   TME_CANCEL          = $80000000;
  7179.  
  7180.   {$EXTERNALSYM HOVER_DEFAULT}
  7181.   HOVER_DEFAULT       = $FFFFFFFF;
  7182.  
  7183. type
  7184.   {$EXTERNALSYM tagTRACKMOUSEEVENT}
  7185.   tagTRACKMOUSEEVENT = packed record
  7186.     cbSize: DWORD;
  7187.     dwFlags: DWORD;
  7188.     hwndTrack: HWND;
  7189.     dwHoverTime: DWORD;
  7190.   end;
  7191.   PTrackMouseEvent = ^TTrackMouseEvent;
  7192.   TTrackMouseEvent = tagTRACKMOUSEEVENT;
  7193.  
  7194. { Declare _TrackMouseEvent.  This API tries to use the window manager's }
  7195. { implementation of TrackMouseEvent if it is present, otherwise it emulates. }
  7196. {$EXTERNALSYM _TrackMouseEvent}
  7197. function _TrackMouseEvent(lpEventTrack: PTrackMouseEvent): BOOL; stdcall;
  7198.  
  7199. { ====== Flat Scrollbar APIs========================================= }
  7200.  
  7201. const
  7202.   {$EXTERNALSYM WSB_PROP_CYVSCROLL}
  7203.   WSB_PROP_CYVSCROLL      = $00000001;
  7204.   {$EXTERNALSYM WSB_PROP_CXHSCROLL}
  7205.   WSB_PROP_CXHSCROLL      = $00000002;
  7206.   {$EXTERNALSYM WSB_PROP_CYHSCROLL}
  7207.   WSB_PROP_CYHSCROLL      = $00000004;
  7208.   {$EXTERNALSYM WSB_PROP_CXVSCROLL}
  7209.   WSB_PROP_CXVSCROLL      = $00000008;
  7210.   {$EXTERNALSYM WSB_PROP_CXHTHUMB}
  7211.   WSB_PROP_CXHTHUMB       = $00000010;
  7212.   {$EXTERNALSYM WSB_PROP_CYVTHUMB}
  7213.   WSB_PROP_CYVTHUMB       = $00000020;
  7214.   {$EXTERNALSYM WSB_PROP_VBKGCOLOR}
  7215.   WSB_PROP_VBKGCOLOR      = $00000040;
  7216.   {$EXTERNALSYM WSB_PROP_HBKGCOLOR}
  7217.   WSB_PROP_HBKGCOLOR      = $00000080;
  7218.   {$EXTERNALSYM WSB_PROP_VSTYLE}
  7219.   WSB_PROP_VSTYLE         = $00000100;
  7220.   {$EXTERNALSYM WSB_PROP_HSTYLE}
  7221.   WSB_PROP_HSTYLE         = $00000200;
  7222.   {$EXTERNALSYM WSB_PROP_WINSTYLE}
  7223.   WSB_PROP_WINSTYLE       = $00000400;
  7224.   {$EXTERNALSYM WSB_PROP_PALETTE}
  7225.   WSB_PROP_PALETTE        = $00000800;
  7226.   {$EXTERNALSYM WSB_PROP_MASK}
  7227.   WSB_PROP_MASK           = $00000FFF;
  7228.  
  7229.   {$EXTERNALSYM FSB_FLAT_MODE}
  7230.   FSB_FLAT_MODE               = 2;
  7231.   {$EXTERNALSYM FSB_ENCARTA_MODE}
  7232.   FSB_ENCARTA_MODE            = 1;
  7233.   {$EXTERNALSYM FSB_REGULAR_MODE}
  7234.   FSB_REGULAR_MODE            = 0;
  7235.  
  7236. {$EXTERNALSYM FlatSB_EnableScrollBar}
  7237. function FlatSB_EnableScrollBar(hWnd: HWND; wSBflags, wArrows: UINT): BOOL; stdcall;
  7238. {$EXTERNALSYM FlatSB_ShowScrollBar}
  7239. function FlatSB_ShowScrollBar(hWnd: HWND; wBar: Integer; bShow: BOOL): BOOL; stdcall;
  7240.  
  7241. {$EXTERNALSYM FlatSB_GetScrollRange}
  7242. function FlatSB_GetScrollRange(hWnd: HWND; nBar: Integer; var lpMinPos,
  7243.   lpMaxPos: Integer): BOOL; stdcall;
  7244. {$EXTERNALSYM FlatSB_GetScrollInfo}
  7245. function FlatSB_GetScrollInfo(hWnd: HWND; BarFlag: Integer;
  7246.   var ScrollInfo: TScrollInfo): BOOL; stdcall;
  7247. {$EXTERNALSYM FlatSB_GetScrollPos}
  7248. function FlatSB_GetScrollPos(hWnd: HWND; nBar: Integer): Integer; stdcall;
  7249. {$EXTERNALSYM FlatSB_GetScrollProp}
  7250. function FlatSB_GetScrollProp(p1: HWND; propIndex: Integer;
  7251.   p3: PInteger): Bool; stdcall;
  7252.  
  7253. {$EXTERNALSYM FlatSB_SetScrollPos}
  7254. function FlatSB_SetScrollPos(hWnd: HWND; nBar, nPos: Integer;
  7255.   bRedraw: BOOL): Integer; stdcall;
  7256. {$EXTERNALSYM FlatSB_SetScrollInfo}
  7257. function FlatSB_SetScrollInfo(hWnd: HWND; BarFlag: Integer;
  7258.   const ScrollInfo: TScrollInfo; Redraw: BOOL): Integer; stdcall;
  7259. {$EXTERNALSYM FlatSB_SetScrollRange}
  7260. function FlatSB_SetScrollRange(hWnd: HWND; nBar, nMinPos, nMaxPos: Integer;
  7261.   bRedraw: BOOL): BOOL; stdcall;
  7262. {$EXTERNALSYM FlatSB_SetScrollProp}
  7263. function FlatSB_SetScrollProp(p1: HWND; index: Integer; newValue: Integer;
  7264.   p4: Bool): Bool; stdcall;
  7265.  
  7266. {$EXTERNALSYM InitializeFlatSB}
  7267. function InitializeFlatSB(hWnd: HWND): Bool; stdcall;
  7268. {$EXTERNALSYM UninitializeFlatSB}
  7269. procedure UninitializeFlatSB(hWnd: HWND); stdcall;
  7270.  
  7271. implementation
  7272.  
  7273. const
  7274.   cctrl = 'comctl32.dll';
  7275.  
  7276. var
  7277.   ComCtl32DLL: THandle;
  7278.   _InitCommonControlsEx: function(var ICC: TInitCommonControlsEx): Bool stdcall;
  7279.  
  7280. procedure InitCommonControls; external cctrl name 'InitCommonControls';
  7281.  
  7282. procedure InitComCtl;
  7283. begin
  7284.   if ComCtl32DLL = 0 then
  7285.   begin
  7286.     ComCtl32DLL := GetModuleHandle(cctrl);
  7287.     if ComCtl32DLL <> 0 then
  7288.       @_InitCommonControlsEx := GetProcAddress(ComCtl32DLL, 'InitCommonControlsEx');
  7289.   end;
  7290. end;
  7291.  
  7292. function InitCommonControlsEx(var ICC: TInitCommonControlsEx): Bool;
  7293. begin
  7294.   if ComCtl32DLL = 0 then InitComCtl;
  7295.   Result := Assigned(_InitCommonControlsEx) and _InitCommonControlsEx(ICC);
  7296. end;
  7297.  
  7298. { Property Sheets }
  7299. function CreatePropertySheetPage; external cctrl name 'CreatePropertySheetPageA';
  7300. function CreatePropertySheetPageA; external cctrl name 'CreatePropertySheetPageA';
  7301. function CreatePropertySheetPageW; external cctrl name 'CreatePropertySheetPageW';
  7302. function DestroyPropertySheetPage; external cctrl name 'DestroyPropertySheetPage';
  7303. function PropertySheet; external cctrl name 'PropertySheetA';
  7304. function PropertySheetA; external cctrl name 'PropertySheetA';
  7305. function PropertySheetW; external cctrl name 'PropertySheetW';
  7306.  
  7307. { Image List }
  7308. function ImageList_Create; external cctrl name 'ImageList_Create';
  7309. function ImageList_Destroy; external cctrl name 'ImageList_Destroy';
  7310. function ImageList_GetImageCount; external cctrl name 'ImageList_GetImageCount';
  7311. function ImageList_SetImageCount; external cctrl name 'ImageList_SetImageCount';
  7312. function ImageList_Add; external cctrl name 'ImageList_Add';
  7313. function ImageList_ReplaceIcon; external cctrl name 'ImageList_ReplaceIcon';
  7314. function ImageList_SetBkColor; external cctrl name 'ImageList_SetBkColor';
  7315. function ImageList_GetBkColor; external cctrl name 'ImageList_GetBkColor';
  7316. function ImageList_SetOverlayImage; external cctrl name 'ImageList_SetOverlayImage';
  7317.  
  7318. function ImageList_AddIcon(ImageList: HIMAGELIST; Icon: HIcon): Integer;
  7319. begin
  7320.   Result := ImageList_ReplaceIcon(ImageList, -1, Icon);
  7321. end;
  7322.  
  7323. function IndexToOverlayMask(Index: Integer): Integer;
  7324. begin
  7325.   Result := Index shl 8;
  7326. end;
  7327.  
  7328. function ImageList_Draw; external cctrl name 'ImageList_Draw';
  7329.  
  7330. function ImageList_Replace; external cctrl name 'ImageList_Replace';
  7331. function ImageList_AddMasked; external cctrl name 'ImageList_AddMasked';
  7332. function ImageList_DrawEx; external cctrl name 'ImageList_DrawEx';
  7333. function ImageList_DrawIndirect; external cctrl name 'ImageList_DrawIndirect';
  7334. function ImageList_Remove; external cctrl name 'ImageList_Remove';
  7335. function ImageList_GetIcon; external cctrl name 'ImageList_GetIcon';
  7336. function ImageList_LoadImage; external cctrl name 'ImageList_LoadImageA';
  7337. function ImageList_LoadImageA; external cctrl name 'ImageList_LoadImageA';
  7338. function ImageList_LoadImageW; external cctrl name 'ImageList_LoadImageW';
  7339. function ImageList_Copy; external cctrl name 'ImageList_Copy';
  7340. function ImageList_BeginDrag; external cctrl name 'ImageList_BeginDrag';
  7341. function ImageList_EndDrag; external cctrl name 'ImageList_EndDrag';
  7342. function ImageList_DragEnter; external cctrl name 'ImageList_DragEnter';
  7343. function ImageList_DragLeave; external cctrl name 'ImageList_DragLeave';
  7344. function ImageList_DragMove; external cctrl name 'ImageList_DragMove';
  7345. function ImageList_SetDragCursorImage; external cctrl name 'ImageList_SetDragCursorImage';
  7346. function ImageList_DragShowNolock; external cctrl name 'ImageList_DragShowNolock';
  7347. function ImageList_GetDragImage; external cctrl name 'ImageList_GetDragImage';
  7348.  
  7349. { macros }
  7350. procedure ImageList_RemoveAll(ImageList: HIMAGELIST);
  7351. begin
  7352.   ImageList_Remove(ImageList, -1);
  7353. end;
  7354.  
  7355. function ImageList_ExtractIcon(Instance: THandle; ImageList: HIMAGELIST;
  7356.   Image: Integer): HIcon;
  7357. begin
  7358.   Result := ImageList_GetIcon(ImageList, Image, 0);
  7359. end;
  7360.  
  7361. function ImageList_LoadBitmap(Instance: THandle; Bmp: PChar;
  7362.   CX, Grow: Integer; Mask: TColorRef): HIMAGELIST;
  7363. begin
  7364.   Result := ImageList_LoadImage(Instance, Bmp, CX, Grow, Mask,
  7365.     IMAGE_BITMAP, 0);
  7366. end;
  7367.  
  7368. function ImageList_Read; external cctrl name 'ImageList_Read';
  7369. function ImageList_Write; external cctrl name 'ImageList_Write';
  7370.  
  7371. function ImageList_GetIconSize; external cctrl name 'ImageList_GetIconSize';
  7372. function ImageList_SetIconSize; external cctrl name 'ImageList_SetIconSize';
  7373. function ImageList_GetImageInfo; external cctrl name 'ImageList_GetImageInfo';
  7374. function ImageList_Merge; external cctrl name 'ImageList_Merge';
  7375. function ImageList_Duplicate(himl: HIMAGELIST): HIMAGELIST; stdcall; external cctrl name 'ImageList_Duplicate';
  7376.  
  7377. { Headers }
  7378.  
  7379. function Header_GetItemCount(Header: HWnd): Integer;
  7380. begin
  7381.   Result := SendMessage(Header, HDM_GETITEMCOUNT, 0, 0);
  7382. end;
  7383.  
  7384. function Header_InsertItem(Header: HWnd; Index: Integer;
  7385.   const Item: THDItem): Integer;
  7386. begin
  7387.   Result := SendMessage(Header, HDM_INSERTITEM, Index, Longint(@Item));
  7388. end;
  7389.  
  7390. function Header_DeleteItem(Header: HWnd; Index: Integer): Bool;
  7391. begin
  7392.   Result := Bool( SendMessage(Header, HDM_DELETEITEM, Index, 0) );
  7393. end;
  7394.  
  7395. function Header_GetItem(Header: HWnd; Index: Integer; var Item: THDItem): Bool;
  7396. begin
  7397.   Result := Bool( SendMessage(Header, HDM_GETITEM, Index, Longint(@Item)) );
  7398. end;
  7399.  
  7400. function Header_SetItem(Header: HWnd; Index: Integer; const Item: THDItem): Bool;
  7401. begin
  7402.   Result := Bool( SendMessage(Header, HDM_SETITEM, Index, Longint(@Item)) );
  7403. end;
  7404.  
  7405. function Header_Layout(Header: HWnd; Layout: PHDLayout): Bool;
  7406. begin
  7407.   Result := Bool( SendMessage(Header, HDM_LAYOUT, 0, Longint(Layout)) );
  7408. end;
  7409.  
  7410. function Header_GetItemRect(hwnd: HWND; iItem: Integer; lprc: PRect): Integer;
  7411. begin
  7412.   Result := SendMessage(hwnd, HDM_GETITEMRECT, iItem, LPARAM(lprc));
  7413. end;
  7414.  
  7415. function Header_SetImageList(hwnd: HWND; himl: HIMAGELIST): HIMAGELIST;
  7416. begin
  7417.   Result := SendMessage(hwnd, HDM_SETIMAGELIST, 0, LPARAM(himl));
  7418. end;
  7419.  
  7420. function Header_GetImageList(hwnd: HWND): HIMAGELIST;
  7421. begin
  7422.   Result := SendMessage(hwnd, HDM_GETIMAGELIST, 0, 0);
  7423. end;
  7424.  
  7425. function Header_OrderToIndex(hwnd: HWND; i: Integer): Integer;
  7426. begin
  7427.   Result := SendMessage(hwnd, HDM_ORDERTOINDEX, i, 0);
  7428. end;
  7429.  
  7430. function Header_CreateDragImage(hwnd: HWND; i: Integer): HIMAGELIST;
  7431. begin
  7432.   Result := SendMessage(hwnd, HDM_CREATEDRAGIMAGE, i, 0);
  7433. end;
  7434.  
  7435. function Header_GetOrderArray(hwnd: HWND; iCount: Integer; lpi: PInteger): Integer;
  7436. begin
  7437.   Result := SendMessage(hwnd, HDM_GETORDERARRAY, iCount, LPARAM(lpi));
  7438. end;
  7439.  
  7440. function Header_SetOrderArray(hwnd: HWND; iCount: Integer; lpi: PInteger): Integer;
  7441. begin
  7442.   Result := SendMessage(hwnd, HDM_SETORDERARRAY, iCount, LPARAM(lpi));
  7443. end;
  7444.  
  7445. function Header_SetHotDivider(hwnd: HWND; fPos: BOOL; dw: DWORD): Integer;
  7446. begin
  7447.   Result := SendMessage(hwnd, HDM_SETHOTDIVIDER, Integer(fPos), dw);
  7448. end;
  7449.  
  7450. function Header_SetUnicodeFormat(hwnd: HWND; fUnicode: BOOL): Integer;
  7451. begin
  7452.   Result := SendMessage(hwnd, HDM_SETUNICODEFORMAT, Integer(fUnicode), 0);
  7453. end;
  7454.  
  7455. function Header_GetUnicodeFormat(hwnd: HWND): Integer;
  7456. begin
  7457.   Result := SendMessage(hwnd, HDM_GETUNICODEFORMAT, 0, 0);
  7458. end;
  7459.  
  7460. { Toolbar }
  7461.  
  7462. function CreateToolBarEx; external cctrl name 'CreateToolbarEx';
  7463. function CreateMappedBitmap; external cctrl name 'CreateMappedBitmap';
  7464.  
  7465. { Status bar }
  7466. procedure DrawStatusText; external cctrl name 'DrawStatusTextA';
  7467. procedure DrawStatusTextA; external cctrl name 'DrawStatusTextA';
  7468. procedure DrawStatusTextW; external cctrl name 'DrawStatusTextW';
  7469. function CreateStatusWindow; external cctrl name 'CreateStatusWindowA';
  7470. function CreateStatusWindowA; external cctrl name 'CreateStatusWindowA';
  7471. function CreateStatusWindowW; external cctrl name 'CreateStatusWindowW';
  7472.  
  7473. { Menu Help }
  7474. procedure MenuHelp; external cctrl name 'MenuHelp';
  7475. function ShowHideMenuCtl; external cctrl name 'ShowHideMenuCtl';
  7476. procedure GetEffectiveClientRect; external cctrl name 'GetEffectiveClientRect';
  7477.  
  7478. { Drag List Box }
  7479. procedure MakeDragList; external cctrl name 'MakeDragList';
  7480. procedure DrawInsert; external cctrl name 'DrawInsert';
  7481. function LBItemFromPt; external cctrl name 'LBItemFromPt';
  7482.  
  7483. { UpDown control }
  7484. function CreateUpDownControl; external cctrl name 'CreateUpDownControl';
  7485.  
  7486. { List View }
  7487. function ListView_GetUnicodeFormat(hwnd: HWND): BOOL;
  7488. begin
  7489.   Result := BOOL(SendMessage(hwnd, LVM_GETUNICODEFORMAT, 0, 0));
  7490. end;
  7491.  
  7492. function ListView_SetUnicodeFormat(hwnd: HWND; fUnicode: BOOL): Integer;
  7493. begin
  7494.   Result := SendMessage(hwnd, LVM_SETUNICODEFORMAT, Integer(fUnicode), 0);
  7495. end;
  7496.  
  7497. function ListView_GetBkColor(hWnd: HWND): TColorRef;
  7498. begin
  7499.   Result := SendMessage(hWnd, LVM_GETBKCOLOR, 0, 0);
  7500. end;
  7501.  
  7502. function ListView_SetBkColor(hWnd: HWND; clrBk: TColorRef): Bool;
  7503. begin
  7504.   Result := Bool( SendMessage(hWnd, LVM_SETBKCOLOR, 0, clrBk) );
  7505. end;
  7506.  
  7507. function ListView_GetImageList(hWnd: HWND; iImageList: Integer): HIMAGELIST;
  7508. begin
  7509.   Result := HIMAGELIST( SendMessage(hWnd, LVM_GETIMAGELIST, iImageList, 0) );
  7510. end;
  7511.  
  7512. function ListView_SetImageList(hWnd: HWND; himl: HIMAGELIST; iImageList: Integer): HIMAGELIST;
  7513. begin
  7514.   Result := HIMAGELIST( SendMessage(hWnd, LVM_SETIMAGELIST, iImageList, Longint(himl)) );
  7515. end;
  7516.  
  7517. function ListView_GetItemCount(hWnd: HWND): Integer;
  7518. begin
  7519.   Result := SendMessage(hWnd, LVM_GETITEMCOUNT, 0, 0);
  7520. end;
  7521.  
  7522. function IndexToStateImageMask(I: Longint): Longint;
  7523. begin
  7524.   Result := I shl 12;
  7525. end;
  7526.  
  7527. function ListView_GetItem(hWnd: HWND; var pItem: TLVItem): Bool;
  7528. begin
  7529.   Result := Bool( SendMessage(hWnd, LVM_GETITEM, 0, Longint(@pItem)) );
  7530. end;
  7531. function ListView_GetItemA(hWnd: HWND; var pItem: TLVItemA): Bool;
  7532. begin
  7533.   Result := Bool( SendMessage(hWnd, LVM_GETITEM, 0, Longint(@pItem)) );
  7534. end;
  7535. function ListView_GetItemW(hWnd: HWND; var pItem: TLVItemW): Bool;
  7536. begin
  7537.   Result := Bool( SendMessage(hWnd, LVM_GETITEM, 0, Longint(@pItem)) );
  7538. end;
  7539.  
  7540. function ListView_SetItem(hWnd: HWND; const pItem: TLVItem): Bool;
  7541. begin
  7542.   Result := Bool( SendMessage(hWnd, LVM_SETITEM, 0, Longint(@pItem)) );
  7543. end;
  7544. function ListView_SetItemA(hWnd: HWND; const pItem: TLVItemA): Bool;
  7545. begin
  7546.   Result := Bool( SendMessage(hWnd, LVM_SETITEM, 0, Longint(@pItem)) );
  7547. end;
  7548. function ListView_SetItemW(hWnd: HWND; const pItem: TLVItemW): Bool;
  7549. begin
  7550.   Result := Bool( SendMessage(hWnd, LVM_SETITEM, 0, Longint(@pItem)) );
  7551. end;
  7552.  
  7553. function ListView_InsertItem(hWnd: HWND; const pItem: TLVItem): Integer;
  7554. begin
  7555.   Result := Integer( SendMessage(hWnd, LVM_INSERTITEM, 0, Longint(@pItem)) );
  7556. end;
  7557. function ListView_InsertItemA(hWnd: HWND; const pItem: TLVItemA): Integer;
  7558. begin
  7559.   Result := Integer( SendMessage(hWnd, LVM_INSERTITEM, 0, Longint(@pItem)) );
  7560. end;
  7561. function ListView_InsertItemW(hWnd: HWND; const pItem: TLVItemW): Integer;
  7562. begin
  7563.   Result := Integer( SendMessage(hWnd, LVM_INSERTITEM, 0, Longint(@pItem)) );
  7564. end;
  7565.  
  7566. function ListView_DeleteItem(hWnd: HWND; i: Integer): Bool;
  7567. begin
  7568.   Result := Bool( SendMessage(hWnd, LVM_DELETEITEM, i, 0) );
  7569. end;
  7570.  
  7571. function ListView_DeleteAllItems(hWnd: HWND): Bool;
  7572. begin
  7573.   Result := Bool( SendMessage(hWnd, LVM_DELETEALLITEMS, 0, 0) );
  7574. end;
  7575.  
  7576. function ListView_GetCallbackMask(hWnd: HWND): UINT;
  7577. begin
  7578.   Result := SendMessage(hWnd, LVM_GETCALLBACKMASK, 0, 0);
  7579. end;
  7580.  
  7581. function ListView_SetCallbackMask(hWnd: HWND; mask: UINT): Bool;
  7582. begin
  7583.   Result := Bool( SendMessage(hWnd, LVM_SETCALLBACKMASK, mask, 0) );
  7584. end;
  7585.  
  7586. function ListView_GetNextItem(hWnd: HWND; iStart: Integer; Flags: UINT): Integer;
  7587. begin
  7588.   Result := SendMessage(hWnd, LVM_GETNEXTITEM, iStart, MakeLong(Flags, 0));
  7589. end;
  7590.  
  7591. function ListView_FindItem(hWnd: HWND; iStart: Integer;
  7592.   const plvfi: TLVFindInfo): Integer;
  7593. begin
  7594.   Result := SendMessage(hWnd, LVM_FINDITEM, iStart, Longint(@plvfi));
  7595. end;
  7596. function ListView_FindItemA(hWnd: HWND; iStart: Integer;
  7597.   const plvfi: TLVFindInfoA): Integer;
  7598. begin
  7599.   Result := SendMessage(hWnd, LVM_FINDITEM, iStart, Longint(@plvfi));
  7600. end;
  7601. function ListView_FindItemW(hWnd: HWND; iStart: Integer;
  7602.   const plvfi: TLVFindInfoW): Integer;
  7603. begin
  7604.   Result := SendMessage(hWnd, LVM_FINDITEM, iStart, Longint(@plvfi));
  7605. end;
  7606.  
  7607. function ListView_GetItemRect(hWnd: HWND; i: Integer; var prc: TRect;
  7608.   Code: Integer): Bool;
  7609. begin
  7610.   if @prc <> nil then
  7611.   begin
  7612.     prc.left := Code;
  7613.     Result := Bool( SendMessage(hWnd, LVM_GETITEMRECT, i, Longint(@prc)) );
  7614.   end
  7615.   else
  7616.     Result := Bool( SendMessage(hWnd, LVM_GETITEMRECT, i, 0) );
  7617. end;
  7618.  
  7619. function ListView_SetItemPosition(hWnd: HWND; i, x, y: Integer): Bool;
  7620. begin
  7621.   Result := Bool( SendMessage(hWnd, LVM_SETITEMPOSITION, i, MakeLong(x, y)) );
  7622. end;
  7623.  
  7624. function ListView_GetItemPosition(hwndLV: HWND; i: Integer;
  7625.   var ppt: TPoint): Bool;
  7626. begin
  7627.   Result := Bool( SendMessage(hWndLV, LVM_GETITEMPOSITION, i, Longint(@ppt)) );
  7628. end;
  7629.  
  7630. function ListView_GetStringWidth(hwndLV: HWND; psz: PChar): Integer;
  7631. begin
  7632.   Result := SendMessage(hwndLV, LVM_GETSTRINGWIDTH, 0, Longint(psz));
  7633. end;
  7634. function ListView_GetStringWidthA(hwndLV: HWND; psz: PAnsiChar): Integer;
  7635. begin
  7636.   Result := SendMessage(hwndLV, LVM_GETSTRINGWIDTH, 0, Longint(psz));
  7637. end;
  7638. function ListView_GetStringWidthW(hwndLV: HWND; psz: PWideChar): Integer;
  7639. begin
  7640.   Result := SendMessage(hwndLV, LVM_GETSTRINGWIDTH, 0, Longint(psz));
  7641. end;
  7642.  
  7643. function ListView_HitTest(hwndLV: HWND; var pinfo: TLVHitTestInfo): Integer;
  7644. begin
  7645.   Result := SendMessage(hwndLV, LVM_HITTEST, 0, Longint(@pinfo));
  7646. end;
  7647.  
  7648. function ListView_EnsureVisible(hwndLV: HWND; i: Integer; fPartialOK: Bool): Bool;
  7649. begin
  7650.   Result := SendMessage(hwndLV, LVM_ENSUREVISIBLE, i,
  7651.     MakeLong(Integer(fPartialOK), 0)) <> 0;
  7652. end;
  7653.  
  7654. function ListView_Scroll(hwndLV: HWnd; DX, DY: Integer): Bool;
  7655. begin
  7656.   Result := Bool( SendMessage(hwndLV, LVM_SCROLL, DX, DY) );
  7657. end;
  7658.  
  7659. function ListView_RedrawItems(hwndLV: HWND; iFirst, iLast: Integer): Bool;
  7660. begin
  7661.   Result := Bool( SendMessage(hwndLV, LVM_REDRAWITEMS, iFirst, iLast) );
  7662. end;
  7663.  
  7664. function ListView_Arrange(hwndLV: HWND; Code: UINT): Bool;
  7665. begin
  7666.   Result := Bool( SendMessage(hwndLV, LVM_ARRANGE, Code, 0) );
  7667. end;
  7668.  
  7669. function ListView_EditLabel(hwndLV: HWND; i: Integer): HWND;
  7670. begin
  7671.   Result := HWND( SendMessage(hwndLV, LVM_EDITLABEL, i, 0) );
  7672. end;
  7673. function ListView_EditLabelA(hwndLV: HWND; i: Integer): HWND;
  7674. begin
  7675.   Result := HWND( SendMessage(hwndLV, LVM_EDITLABEL, i, 0) );
  7676. end;
  7677. function ListView_EditLabelW(hwndLV: HWND; i: Integer): HWND;
  7678. begin
  7679.   Result := HWND( SendMessage(hwndLV, LVM_EDITLABEL, i, 0) );
  7680. end;
  7681.  
  7682. function ListView_GetEditControl(hwndLV: HWND): HWND;
  7683. begin
  7684.   Result := HWND( SendMessage(hwndLV, LVM_GETEDITCONTROL, 0, 0) );
  7685. end;
  7686.  
  7687. function ListView_GetColumn(hwnd: HWND; iCol: Integer; var pcol: TLVColumn): Bool;
  7688. begin
  7689.   Result := Bool( SendMessage(hwnd, LVM_GETCOLUMN, iCol, Longint(@pcol)) );
  7690. end;
  7691. function ListView_GetColumnA(hwnd: HWND; iCol: Integer; var pcol: TLVColumnA): Bool;
  7692. begin
  7693.   Result := Bool( SendMessage(hwnd, LVM_GETCOLUMN, iCol, Longint(@pcol)) );
  7694. end;
  7695. function ListView_GetColumnW(hwnd: HWND; iCol: Integer; var pcol: TLVColumnW): Bool;
  7696. begin
  7697.   Result := Bool( SendMessage(hwnd, LVM_GETCOLUMN, iCol, Longint(@pcol)) );
  7698. end;
  7699.  
  7700. function ListView_SetColumn(hwnd: HWND; iCol: Integer; const pcol: TLVColumn): Bool;
  7701. begin
  7702.   Result := Bool( SendMessage(hwnd, LVM_SETCOLUMN, iCol, Longint(@pcol)) );
  7703. end;
  7704. function ListView_SetColumnA(hwnd: HWND; iCol: Integer; const pcol: TLVColumnA): Bool;
  7705. begin
  7706.   Result := Bool( SendMessage(hwnd, LVM_SETCOLUMN, iCol, Longint(@pcol)) );
  7707. end;
  7708. function ListView_SetColumnW(hwnd: HWND; iCol: Integer; const pcol: TLVColumnW): Bool;
  7709. begin
  7710.   Result := Bool( SendMessage(hwnd, LVM_SETCOLUMN, iCol, Longint(@pcol)) );
  7711. end;
  7712.  
  7713. function ListView_InsertColumn(hwnd: HWND; iCol: Integer; const pcol: TLVColumn): Integer;
  7714. begin
  7715.   Result := SendMessage(hWnd, LVM_INSERTCOLUMN, iCol, Longint(@pcol));
  7716. end;
  7717. function ListView_InsertColumnA(hwnd: HWND; iCol: Integer; const pcol: TLVColumnA): Integer;
  7718. begin
  7719.   Result := SendMessage(hWnd, LVM_INSERTCOLUMN, iCol, Longint(@pcol));
  7720. end;
  7721. function ListView_InsertColumnW(hwnd: HWND; iCol: Integer; const pcol: TLVColumnW): Integer;
  7722. begin
  7723.   Result := SendMessage(hWnd, LVM_INSERTCOLUMN, iCol, Longint(@pcol));
  7724. end;
  7725.  
  7726. function ListView_DeleteColumn(hwnd: HWND; iCol: Integer): Bool;
  7727. begin
  7728.   Result := Bool( SendMessage(hWnd, LVM_DELETECOLUMN, iCol, 0) );
  7729. end;
  7730.  
  7731. function ListView_GetColumnWidth(hwnd: HWND; iCol: Integer): Integer;
  7732. begin
  7733.   Result := Integer( SendMessage(hwnd, LVM_GETCOLUMNWIDTH, iCol, 0) );
  7734. end;
  7735.  
  7736. function ListView_SetColumnWidth(hwnd: HWnd; iCol: Integer; cx: Integer): Bool;
  7737. begin
  7738.   Result := Bool( SendMessage(hwnd, LVM_SETCOLUMNWIDTH, iCol,
  7739.     MakeLong((cx), 0)) );
  7740. end;
  7741.  
  7742. function ListView_GetHeader(hwnd: HWND): HWND;
  7743. begin
  7744.   Result := SendMessage(hwnd, LVM_GETHEADER, 0, 0);
  7745. end;
  7746.  
  7747. function ListView_CreateDragImage(hwnd: HWND; i: Integer;
  7748.   const lpptUpLeft: TPoint): HIMAGELIST;
  7749. begin
  7750.   Result := HIMAGELIST( SendMessage(hwnd, LVM_CREATEDRAGIMAGE, i,
  7751.     Longint(@lpptUpLeft)));
  7752. end;
  7753.  
  7754. function ListView_GetViewRect(hwnd: HWND; var prc: TRect): Bool;
  7755. begin
  7756.   Result := Bool( SendMessage(hwnd, LVM_GETVIEWRECT, 0, Longint(@prc)) );
  7757. end;
  7758.  
  7759. function ListView_GetTextColor(hwnd: HWND): TColorRef;
  7760. begin
  7761.   Result := SendMessage(hwnd, LVM_GETTEXTCOLOR, 0, 0);
  7762. end;
  7763.  
  7764. function ListView_SetTextColor(hwnd: HWND; clrText: TColorRef): Bool;
  7765. begin
  7766.   Result := Bool( SendMessage(hwnd, LVM_SETTEXTCOLOR, 0, clrText) );
  7767. end;
  7768.  
  7769. function ListView_GetTextBkColor(hwnd: HWND): TColorRef;
  7770. begin
  7771.   Result := SendMessage(hwnd, LVM_GETTEXTBKCOLOR, 0, 0);
  7772. end;
  7773.  
  7774. function ListView_SetTextBkColor(hwnd: HWND; clrTextBk: TColorRef): Bool;
  7775. begin
  7776.   Result := Bool( SendMessage(hwnd, LVM_SETTEXTBKCOLOR, 0, clrTextBk) );
  7777. end;
  7778.  
  7779. function ListView_GetTopIndex(hwndLV: HWND): Integer;
  7780. begin
  7781.   Result := SendMessage(hwndLV, LVM_GETTOPINDEX, 0, 0);
  7782. end;
  7783.  
  7784. function ListView_GetCountPerPage(hwndLV: HWND): Integer;
  7785. begin
  7786.   Result := SendMessage(hwndLV, LVM_GETCOUNTPERPAGE, 0, 0);
  7787. end;
  7788.  
  7789. function ListView_GetOrigin(hwndLV: HWND; var ppt: TPoint): Bool;
  7790. begin
  7791.   Result := Bool( SendMessage(hwndLV, LVM_GETORIGIN, 0, Longint(@ppt)) );
  7792. end;
  7793.  
  7794. function ListView_Update(hwndLV: HWND; i: Integer): Bool;
  7795. begin
  7796.   Result := SendMessage(hwndLV, LVM_UPDATE, i, 0) <> 0;
  7797. end;
  7798.  
  7799. function ListView_SetItemState(hwndLV: HWND; i: Integer; data, mask: UINT): Bool;
  7800. var
  7801.   Item: TLVItem;
  7802. begin
  7803.   Item.stateMask := mask;
  7804.   Item.state := data;
  7805.   Result := Bool( SendMessage(hwndLV, LVM_SETITEMSTATE, i, Longint(@Item)) );
  7806. end;
  7807.  
  7808. function ListView_GetItemState(hwndLV: HWND; i, mask: Integer): Integer;
  7809. begin
  7810.   Result := SendMessage(hwndLV, LVM_GETITEMSTATE, i, mask);
  7811. end;
  7812.  
  7813. function ListView_GetCheckState(hwndLV: HWND; i: Integer): UINT;
  7814. begin
  7815.   Result := (SendMessage(hwndLV, LVM_GETITEMSTATE, i, LVIS_STATEIMAGEMASK) shr 12) - 1 ;
  7816. end;
  7817.  
  7818. procedure ListView_SetCheckState(hwndLV: HWND; i: Integer; Checked: Boolean);
  7819. var
  7820.   Item: TLVItem;
  7821. begin
  7822.   Item.statemask := LVIS_STATEIMAGEMASK;
  7823.   Item.State := ((Integer(Checked) and 1) + 1) shl 12;
  7824.   SendMessage(hwndLV, LVM_SETITEMSTATE, i, Integer(@Item));
  7825. end;
  7826.  
  7827. function ListView_GetItemText(hwndLV: HWND; i, iSubItem: Integer;
  7828.   pszText: PChar; cchTextMax: Integer): Integer;
  7829. var
  7830.   Item: TLVItem;
  7831. begin
  7832.   Item.iSubItem := iSubItem;
  7833.   Item.cchTextMax := cchTextMax;
  7834.   Item.pszText := pszText;
  7835.   Result := SendMessage(hwndLV, LVM_GETITEMTEXT, i, Longint(@Item));
  7836. end;
  7837. function ListView_GetItemTextA(hwndLV: HWND; i, iSubItem: Integer;
  7838.   pszText: PAnsiChar; cchTextMax: Integer): Integer;
  7839. var
  7840.   Item: TLVItemA;
  7841. begin
  7842.   Item.iSubItem := iSubItem;
  7843.   Item.cchTextMax := cchTextMax;
  7844.   Item.pszText := pszText;
  7845.   Result := SendMessage(hwndLV, LVM_GETITEMTEXT, i, Longint(@Item));
  7846. end;
  7847. function ListView_GetItemTextW(hwndLV: HWND; i, iSubItem: Integer;
  7848.   pszText: PWideChar; cchTextMax: Integer): Integer;
  7849. var
  7850.   Item: TLVItemW;
  7851. begin
  7852.   Item.iSubItem := iSubItem;
  7853.   Item.cchTextMax := cchTextMax;
  7854.   Item.pszText := pszText;
  7855.   Result := SendMessage(hwndLV, LVM_GETITEMTEXT, i, Longint(@Item));
  7856. end;
  7857.  
  7858. function ListView_SetItemText(hwndLV: HWND; i, iSubItem: Integer;
  7859.   pszText: PChar): Bool;
  7860. var
  7861.   Item: TLVItem;
  7862. begin
  7863.   Item.iSubItem := iSubItem;
  7864.   Item.pszText := pszText;
  7865.   Result := Bool( SendMessage(hwndLV, LVM_SETITEMTEXT, i, Longint(@Item)) );
  7866. end;
  7867. function ListView_SetItemTextA(hwndLV: HWND; i, iSubItem: Integer;
  7868.   pszText: PAnsiChar): Bool;
  7869. var
  7870.   Item: TLVItemA;
  7871. begin
  7872.   Item.iSubItem := iSubItem;
  7873.   Item.pszText := pszText;
  7874.   Result := Bool( SendMessage(hwndLV, LVM_SETITEMTEXT, i, Longint(@Item)) );
  7875. end;
  7876. function ListView_SetItemTextW(hwndLV: HWND; i, iSubItem: Integer;
  7877.   pszText: PWideChar): Bool;
  7878. var
  7879.   Item: TLVItemW;
  7880. begin
  7881.   Item.iSubItem := iSubItem;
  7882.   Item.pszText := pszText;
  7883.   Result := Bool( SendMessage(hwndLV, LVM_SETITEMTEXT, i, Longint(@Item)) );
  7884. end;
  7885.  
  7886. procedure ListView_SetItemCount(hwndLV: HWND; cItems: Integer);
  7887. begin
  7888.   SendMessage(hwndLV, LVM_SETITEMCOUNT, cItems, 0);
  7889. end;
  7890.  
  7891. procedure ListView_SetItemCountEx(hwndLV: HWND; cItems: Integer; dwFlags: DWORD);
  7892. begin
  7893.   SendMessage(hwndLV, LVM_SETITEMCOUNT, cItems, dwFlags);
  7894. end;
  7895.  
  7896. function ListView_SortItems(hwndLV: HWND; pfnCompare: TLVCompare;
  7897.   lPrm: Longint): Bool;
  7898. begin
  7899.   Result := Bool( SendMessage(hwndLV, LVM_SORTITEMS, lPrm,
  7900.     Longint(@pfnCompare)) );
  7901. end;
  7902.  
  7903. procedure ListView_SetItemPosition32(hwndLV: HWND; i, x, y: Integer);
  7904. var
  7905.   ptNewPos: TPoint;
  7906. begin
  7907.   ptNewPos.x := x;
  7908.   ptNewPos.y := y;
  7909.   SendMessage(hwndLV, LVM_SETITEMPOSITION32, i, Longint(@ptNewPos));
  7910. end;
  7911.  
  7912. function ListView_GetSelectedCount(hwndLV: HWND): UINT;
  7913. begin
  7914.   Result := SendMessage(hwndLV, LVM_GETSELECTEDCOUNT, 0, 0);
  7915. end;
  7916.  
  7917. function ListView_GetItemSpacing(hwndLV: HWND; fSmall: Integer): Longint;
  7918. begin
  7919.   Result := SendMessage(hwndLV, LVM_GETITEMSPACING, fSmall, 0);
  7920. end;
  7921.  
  7922. function ListView_GetISearchString(hwndLV: HWND; lpsz: PChar): Bool;
  7923. begin
  7924.   Result := Bool( SendMessage(hwndLV, LVM_GETISEARCHSTRING, 0,
  7925.     Longint(lpsz)) );
  7926. end;
  7927. function ListView_GetISearchStringA(hwndLV: HWND; lpsz: PAnsiChar): Bool;
  7928. begin
  7929.   Result := Bool( SendMessage(hwndLV, LVM_GETISEARCHSTRING, 0,
  7930.     Longint(lpsz)) );
  7931. end;
  7932. function ListView_GetISearchStringW(hwndLV: HWND; lpsz: PWideChar): Bool;
  7933. begin
  7934.   Result := Bool( SendMessage(hwndLV, LVM_GETISEARCHSTRING, 0,
  7935.     Longint(lpsz)) );
  7936. end;
  7937.  
  7938. function ListView_SetIconSpacing(hwndLV: HWND; cx, cy: Word): DWORD;
  7939. begin
  7940.   Result := SendMessage(hwndLV, LVM_SETICONSPACING, 0, MakeLong(cx, cy));
  7941. end;
  7942.  
  7943. function ListView_SetExtendedListViewStyle(hwndLV: HWND; dw: DWORD): BOOL;
  7944. begin
  7945.   Result := BOOL(SendMessage(hwndLV, LVM_SETEXTENDEDLISTVIEWSTYLE, 0, dw));
  7946. end;
  7947.  
  7948. function ListView_GetExtendedListViewStyle(hwndLV: HWND): DWORD;
  7949. begin
  7950.   Result := SendMessage(hwndLV, LVM_GETEXTENDEDLISTVIEWSTYLE, 0, 0);
  7951. end;
  7952.  
  7953. function ListView_GetSubItemRect(hwndLV: HWND; iItem, iSubItem: Integer;
  7954.   code: DWORD; prc: PRect): BOOL;
  7955. begin
  7956.   if prc <> nil then
  7957.   begin
  7958.     prc^.Top := iSubItem;
  7959.     prc^.Left := code;
  7960.   end;
  7961.   Result := BOOL(SendMessage(hwndLV, LVM_GETSUBITEMRECT, iItem, Longint(prc)));
  7962. end;
  7963.  
  7964. function ListView_SubItemHitTest(hwndLV: HWND; plvhti: PLVHitTestInfo): Integer;
  7965. begin
  7966.   Result := SendMessage(hwndLV, LVM_SUBITEMHITTEST, 0, Longint(plvhti));
  7967. end;
  7968.  
  7969. function ListView_SetColumnOrderArray(hwndLV: HWND; iCount: Integer;
  7970.   pi: PInteger): BOOL;
  7971. begin
  7972.   Result := BOOL(SendMessage(hwndLV, LVM_SETCOLUMNORDERARRAY, iCount,
  7973.     Longint(pi)));
  7974. end;
  7975.  
  7976. function ListView_GetColumnOrderArray(hwndLV: HWND; iCount: Integer;
  7977.   pi: PInteger): BOOL;
  7978. begin
  7979.   Result := BOOL(SendMessage(hwndLV, LVM_GETCOLUMNORDERARRAY, iCount,
  7980.     Longint(pi)));
  7981. end;
  7982.  
  7983. function ListView_SetHotItem(hwndLV: HWND; i: Integer): Integer;
  7984. begin
  7985.   Result := SendMessage(hwndLV, LVM_SETHOTITEM, i, 0);
  7986. end;
  7987.  
  7988. function ListView_GetHotItem(hwndLV: HWND): Integer;
  7989. begin
  7990.   Result := SendMessage(hwndLV, LVM_GETHOTITEM, 0, 0);
  7991. end;
  7992.  
  7993. function ListView_SetHotCursor(hwndLV: HWND; hcur: HCURSOR): HCURSOR;
  7994. begin
  7995.   Result := SendMessage(hwndLV, LVM_SETHOTCURSOR, 0, hcur);
  7996. end;
  7997.  
  7998. function ListView_GetHotCursor(hwndLV: HWND): HCURSOR;
  7999. begin
  8000.   Result := SendMessage(hwndLV, LVM_GETHOTCURSOR, 0, 0);
  8001. end;
  8002.  
  8003. function ListView_ApproximateViewRect(hwndLV: HWND; iWidth, iHeight: Word;
  8004.   iCount: Integer): DWORD;
  8005. begin
  8006.   Result := SendMessage(hwndLV, LVM_APPROXIMATEVIEWRECT, iCount,
  8007.     MakeLParam(iWidth, iHeight));
  8008. end;
  8009.  
  8010. function ListView_SetWorkAreas(hwndLV: HWND; nWorkAreas: Integer; prc: PRect): BOOL;
  8011. begin
  8012.   Result := BOOL(SendMessage(hwndLV, LVM_SETWORKAREA, nWorkAreas, Longint(prc)));
  8013. end;
  8014.  
  8015. function ListView_GetSelectionMark(hwnd: HWND): Integer;
  8016. begin
  8017.   Result := SendMessage(hwnd, LVM_GETSELECTIONMARK, 0, 0);
  8018. end;
  8019.  
  8020. function ListView_SetSelectionMark(hwnd: HWND; i: Integer): Integer;
  8021. begin
  8022.   Result := SendMessage(hwnd, LVM_SETSELECTIONMARK, 0, i);
  8023. end;
  8024.  
  8025. function ListView_GetWorkAreas(hwnd: HWND; nWorkAreas: Integer; prc: PRect): BOOL;
  8026. begin
  8027.   Result := BOOL(SendMessage(hwnd, LVM_GETWORKAREAS, nWorkAreas, Integer(prc)));
  8028. end;
  8029.  
  8030. function ListView_SetHoverTime(hwndLV: HWND; dwHoverTimeMs: DWORD): DWORD;
  8031. begin
  8032.   Result := SendMessage(hwndLV, LVM_SETHOVERTIME, 0, dwHoverTimeMs);
  8033. end;
  8034.  
  8035. function ListView_GetHoverTime(hwndLV: HWND): Integer;
  8036. begin
  8037.   Result := SendMessage(hwndLV, LVM_GETHOVERTIME, 0, 0);
  8038. end;
  8039.  
  8040. function ListView_GetNumberOfWorkAreas(hwnd: HWND; pnWorkAreas: PInteger): Integer;
  8041. begin
  8042.   Result := SendMessage(hwnd, LVM_GETNUMBEROFWORKAREAS, 0, Integer(pnWorkAreas));
  8043. end;
  8044.  
  8045. function ListView_SetToolTips(hwndLV: HWND; hwndNewHwnd: HWND): HWND;
  8046. begin
  8047.   Result := HWND(SendMessage(hwndLV, LVM_SETTOOLTIPS, WPARAM(hwndNewHwnd), 0));
  8048. end;
  8049.  
  8050. function ListView_GetToolTips(hwndLV: HWND): HWND;
  8051. begin
  8052.   Result := HWND(SendMessage(hwndLV, LVM_GETTOOLTIPS, 0, 0));
  8053. end;
  8054.  
  8055. function ListView_SetBkImage(hwnd: HWND; plvbki: PLVBKImage): BOOL;
  8056. begin
  8057.   Result := BOOL(SendMessage(hwnd, LVM_SETBKIMAGE, 0, LPARAM(plvbki)));
  8058. end;
  8059.  
  8060. function ListView_GetBkImage(hwnd: HWND; plvbki: PLVBKImage): BOOL;
  8061. begin
  8062.   Result := BOOL(SendMessage(hwnd, LVM_GETBKIMAGE, 0, LPARAM(plvbki)));
  8063. end;
  8064.  
  8065. { Tree View }
  8066.  
  8067. function TreeView_InsertItem(hwnd: HWND; const lpis: TTVInsertStruct): HTreeItem;
  8068. begin
  8069.   Result := HTreeItem( SendMessage(hwnd, TVM_INSERTITEM, 0, Longint(@lpis)) );
  8070. end;
  8071.  
  8072. function TreeView_DeleteItem(hwnd: HWND; hitem: HTreeItem): Bool;
  8073. begin
  8074.   Result := Bool( SendMessage(hwnd, TVM_DELETEITEM, 0, Longint(hitem)) );
  8075. end;
  8076.  
  8077. function TreeView_DeleteAllItems(hwnd: HWND): Bool;
  8078. begin
  8079.   Result := Bool( SendMessage(hwnd, TVM_DELETEITEM, 0, Longint(TVI_ROOT)) );
  8080. end;
  8081.  
  8082. function TreeView_Expand(hwnd: HWND; hitem: HTreeItem; code: Integer): Bool;
  8083. begin
  8084.   Result := Bool( SendMessage(hwnd, TVM_EXPAND, code, Longint(hitem)) );
  8085. end;
  8086.  
  8087. function TreeView_GetItemRect(hwnd: HWND; hitem: HTreeItem;
  8088.   var prc: TRect; code: Bool): Bool;
  8089. begin
  8090.   HTreeItem(Pointer(@prc)^) := hitem;
  8091.   Result := Bool( SendMessage(hwnd, TVM_GETITEMRECT, Integer(code), Longint(@prc)) );
  8092. end;
  8093.  
  8094. function TreeView_GetCount(hwnd: HWND): UINT;
  8095. begin
  8096.   Result := SendMessage(hwnd, TVM_GETCOUNT, 0, 0);
  8097. end;
  8098.  
  8099. function TreeView_GetIndent(hwnd: HWND): UINT;
  8100. begin
  8101.   Result := SendMessage(hwnd, TVM_GETINDENT, 0, 0);
  8102. end;
  8103.  
  8104. function TreeView_SetIndent(hwnd: HWND; indent: Integer): Bool;
  8105. begin
  8106.   Result := Bool( SendMessage(hwnd, TVM_SETINDENT, indent, 0) );
  8107. end;
  8108.  
  8109. function TreeView_GetImageList(hwnd: HWND; iImage: Integer): HIMAGELIST;
  8110. begin
  8111.   Result := HIMAGELIST( SendMessage(hwnd, TVM_GETIMAGELIST, iImage, 0) );
  8112. end;
  8113.  
  8114. function TreeView_SetImageList(hwnd: HWND; himl: HIMAGELIST;
  8115.   iImage: Integer): HIMAGELIST;
  8116. begin
  8117.   Result := HIMAGELIST( SendMessage(hwnd, TVM_SETIMAGELIST, iImage,
  8118.     Longint(himl)) );
  8119. end;
  8120.  
  8121. function TreeView_GetNextItem(hwnd: HWND; hitem: HTreeItem;
  8122.   code: Integer): HTreeItem;
  8123. begin
  8124.   Result := HTreeItem( SendMessage(hwnd, TVM_GETNEXTITEM, code,
  8125.     Longint(hitem)) );
  8126. end;
  8127.  
  8128. function TreeView_GetChild(hwnd: HWND; hitem: HTreeItem): HTreeItem;
  8129. begin
  8130.   Result := TreeView_GetNextItem(hwnd, hitem, TVGN_CHILD);
  8131. end;
  8132.  
  8133. function TreeView_GetNextSibling(hwnd: HWND; hitem: HTreeItem): HTreeItem;
  8134. begin
  8135.   Result := TreeView_GetNextItem(hwnd, hitem, TVGN_NEXT);
  8136. end;
  8137.  
  8138. function TreeView_GetPrevSibling(hwnd: HWND; hitem: HTreeItem): HTreeItem;
  8139. begin
  8140.   Result := TreeView_GetNextItem(hwnd, hitem, TVGN_PREVIOUS);
  8141. end;
  8142.  
  8143. function TreeView_GetParent(hwnd: HWND; hitem: HTreeItem): HTreeItem;
  8144. begin
  8145.   Result := TreeView_GetNextItem(hwnd, hitem, TVGN_PARENT);
  8146. end;
  8147.  
  8148. function TreeView_GetFirstVisible(hwnd: HWND): HTreeItem;
  8149. begin
  8150.   Result := TreeView_GetNextItem(hwnd, nil,  TVGN_FIRSTVISIBLE);
  8151. end;
  8152.  
  8153. function TreeView_GetNextVisible(hwnd: HWND; hitem: HTreeItem): HTreeItem;
  8154. begin
  8155.   Result := TreeView_GetNextItem(hwnd, hitem, TVGN_NEXTVISIBLE);
  8156. end;
  8157.  
  8158. function TreeView_GetPrevVisible(hwnd: HWND; hitem: HTreeItem): HTreeItem;
  8159. begin
  8160.   Result := TreeView_GetNextItem(hwnd, hitem, TVGN_PREVIOUSVISIBLE);
  8161. end;
  8162.  
  8163. function TreeView_GetSelection(hwnd: HWND): HTreeItem;
  8164. begin
  8165.   Result := TreeView_GetNextItem(hwnd, nil, TVGN_CARET);
  8166. end;
  8167.  
  8168. function TreeView_GetDropHilite(hwnd: HWND): HTreeItem;
  8169. begin
  8170.   Result := TreeView_GetNextItem(hwnd, nil, TVGN_DROPHILITE);
  8171. end;
  8172.  
  8173. function TreeView_GetRoot(hwnd: HWND): HTreeItem;
  8174. begin
  8175.   Result := TreeView_GetNextItem(hwnd, nil, TVGN_ROOT);
  8176. end;
  8177.  
  8178. function TreeView_GetLastVisible(hwnd: HWND): HTreeItem;
  8179. begin
  8180.   Result := TreeView_GetNextItem(hwnd, nil,  TVGN_LASTVISIBLE);
  8181. end;
  8182.  
  8183. function TreeView_Select(hwnd: HWND; hitem: HTreeItem;
  8184.   code: Integer): HTreeItem;
  8185. begin
  8186.   Result := HTreeItem( SendMessage(hwnd, TVM_SELECTITEM, code,
  8187.     Longint(hitem)) );
  8188. end;
  8189.  
  8190. function TreeView_SelectItem(hwnd: HWND; hitem: HTreeItem): HTreeItem;
  8191. begin
  8192.   Result := TreeView_Select(hwnd, hitem, TVGN_CARET);
  8193. end;
  8194.  
  8195. function TreeView_SelectDropTarget(hwnd: HWND; hitem: HTreeItem): HTreeItem;
  8196. begin
  8197.   Result := TreeView_Select(hwnd, hitem, TVGN_DROPHILITE);
  8198. end;
  8199.  
  8200. function TreeView_SelectSetFirstVisible(hwnd: HWND; hitem: HTreeItem): HTreeItem;
  8201. begin
  8202.   Result := TreeView_Select(hwnd, hitem, TVGN_FIRSTVISIBLE);
  8203. end;
  8204.  
  8205. function TreeView_GetItem(hwnd: HWND; var pitem: TTVItem): Bool;
  8206. begin
  8207.   Result := Bool( SendMessage(hwnd, TVM_GETITEM, 0, Longint(@pitem)) );
  8208. end;
  8209. function TreeView_GetItemA(hwnd: HWND; var pitem: TTVItemA): Bool;
  8210. begin
  8211.   Result := Bool( SendMessage(hwnd, TVM_GETITEM, 0, Longint(@pitem)) );
  8212. end;
  8213. function TreeView_GetItemW(hwnd: HWND; var pitem: TTVItemW): Bool;
  8214. begin
  8215.   Result := Bool( SendMessage(hwnd, TVM_GETITEM, 0, Longint(@pitem)) );
  8216. end;
  8217.  
  8218. function TreeView_SetItem(hwnd: HWND; const pitem: TTVItem): Bool;
  8219. begin
  8220.   Result := Bool( SendMessage(hwnd, TVM_SETITEM, 0, Longint(@pitem)) );
  8221. end;
  8222. function TreeView_SetItemA(hwnd: HWND; const pitem: TTVItemA): Bool;
  8223. begin
  8224.   Result := Bool( SendMessage(hwnd, TVM_SETITEM, 0, Longint(@pitem)) );
  8225. end;
  8226. function TreeView_SetItemW(hwnd: HWND; const pitem: TTVItemW): Bool;
  8227. begin
  8228.   Result := Bool( SendMessage(hwnd, TVM_SETITEM, 0, Longint(@pitem)) );
  8229. end;
  8230.  
  8231. function TreeView_EditLabel(hwnd: HWND; hitem: HTreeItem): HWND;
  8232. begin
  8233.   Result := Windows.HWND( SendMessage(hwnd, TVM_EDITLABEL, 0, Longint(hitem)) );
  8234. end;
  8235. function TreeView_EditLabelA(hwnd: HWND; hitem: HTreeItem): HWND;
  8236. begin
  8237.   Result := Windows.HWND( SendMessage(hwnd, TVM_EDITLABEL, 0, Longint(hitem)) );
  8238. end;
  8239. function TreeView_EditLabelW(hwnd: HWND; hitem: HTreeItem): HWND;
  8240. begin
  8241.   Result := Windows.HWND( SendMessage(hwnd, TVM_EDITLABEL, 0, Longint(hitem)) );
  8242. end;
  8243.  
  8244. function TreeView_GetEditControl(hwnd: HWND): HWND;
  8245. begin
  8246.   Result := Windows.HWND( SendMessage(hwnd, TVM_GETEDITCONTROL, 0, 0) );
  8247. end;
  8248.  
  8249. function TreeView_GetVisibleCount(hwnd: HWND): UINT;
  8250. begin
  8251.   Result := SendMessage(hwnd, TVM_GETVISIBLECOUNT, 0, 0);
  8252. end;
  8253.  
  8254. function TreeView_HitTest(hwnd: HWND; var lpht: TTVHitTestInfo): HTreeItem;
  8255. begin
  8256.   Result := HTreeItem( SendMessage(hwnd, TVM_HITTEST, 0, Longint(@lpht)) );
  8257. end;
  8258.  
  8259. function TreeView_CreateDragImage(hwnd: HWND; hitem: HTreeItem): HIMAGELIST;
  8260. begin
  8261.   Result := HIMAGELIST( SendMessage(hwnd, TVM_CREATEDRAGIMAGE, 0,
  8262.     Longint(hitem)) );
  8263. end;
  8264.  
  8265. function TreeView_SortChildren(hwnd: HWND; hitem: HTreeItem;
  8266.   recurse: Integer): Bool;
  8267. begin
  8268.   Result := Bool( SendMessage(hwnd, TVM_SORTCHILDREN, recurse,
  8269.     Longint(hitem)) );
  8270. end;
  8271.  
  8272. function TreeView_EnsureVisible(hwnd: HWND; hitem: HTreeItem): Bool;
  8273. begin
  8274.   Result := Bool( SendMessage(hwnd, TVM_ENSUREVISIBLE, 0, Longint(hitem)) );
  8275. end;
  8276.  
  8277. function TreeView_SortChildrenCB(hwnd: HWND; const psort: TTVSortCB;
  8278.   recurse: Integer): Bool;
  8279. begin
  8280.   Result := Bool( SendMessage(hwnd, TVM_SORTCHILDRENCB, recurse,
  8281.     Longint(@psort)) );
  8282. end;
  8283.  
  8284. function TreeView_EndEditLabelNow(hwnd: HWND; fCancel: Bool): Bool;
  8285. begin
  8286.   Result := Bool( SendMessage(hwnd, TVM_ENDEDITLABELNOW, Integer(fCancel),
  8287.     0) );
  8288. end;
  8289.  
  8290. function TreeView_GetISearchString(hwndTV: HWND; lpsz: PChar): Bool;
  8291. begin
  8292.   Result := Bool( SendMessage(hwndTV, TVM_GETISEARCHSTRING, 0,
  8293.     Longint(lpsz)) );
  8294. end;
  8295. function TreeView_GetISearchStringA(hwndTV: HWND; lpsz: PAnsiChar): Bool;
  8296. begin
  8297.   Result := Bool( SendMessage(hwndTV, TVM_GETISEARCHSTRING, 0,
  8298.     Longint(lpsz)) );
  8299. end;
  8300. function TreeView_GetISearchStringW(hwndTV: HWND; lpsz: PWideChar): Bool;
  8301. begin
  8302.   Result := Bool( SendMessage(hwndTV, TVM_GETISEARCHSTRING, 0,
  8303.     Longint(lpsz)) );
  8304. end;
  8305.  
  8306. function TreeView_SetToolTips(wnd: HWND; hwndTT: HWND): HWND;
  8307. begin
  8308.   Result := HWND(SendMessage(wnd, TVM_SETTOOLTIPS, WPARAM(hwndTT), 0));
  8309. end;
  8310.  
  8311. function TreeView_GetToolTips(wnd: HWND): HWND;
  8312. begin
  8313.   Result := HWND(SendMessage(wnd, TVM_GETTOOLTIPS, 0, 0));
  8314. end;
  8315.  
  8316. function TreeView_SetInsertMark(hwnd: HWND; hItem: Integer; fAfter: BOOL): BOOL;
  8317. begin
  8318.   Result := BOOL(SendMessage(hwnd, TVM_SETINSERTMARK, WPARAM(fAfter), LPARAM(hItem)));
  8319. end;
  8320.  
  8321. function TreeView_SetUnicodeFormat(hwnd: HWND; fUnicode: BOOL): BOOL;
  8322. begin
  8323.   Result := BOOL(SendMessage(hwnd, TVM_SETUNICODEFORMAT, WPARAM(fUnicode), 0));
  8324. end;
  8325.  
  8326. function TreeView_GetUnicodeFormat(hwnd: HWND): BOOL;
  8327. begin
  8328.   Result := BOOL(SendMessage(hwnd, TVM_GETUNICODEFORMAT, 0, 0));
  8329. end;
  8330.  
  8331. function TreeView_SetItemHeight(hwnd: HWND; iHeight: Integer): Integer;
  8332. begin
  8333.   Result := SendMessage(hwnd, TVM_SETITEMHEIGHT, iHeight, 0);
  8334. end;
  8335.  
  8336. function TreeView_GetItemHeight(hwnd: HWND): Integer;
  8337. begin
  8338.   Result := SendMessage(hwnd, TVM_GETITEMHEIGHT, 0, 0);
  8339. end;
  8340.  
  8341. function TreeView_SetBkColor(hwnd: HWND; clr: COLORREF): COLORREF;
  8342. begin
  8343.   Result := COLORREF(SendMessage(hwnd, TVM_SETBKCOLOR, 0, LPARAM(clr)));
  8344. end;
  8345.  
  8346. function TreeView_SetTextColor(hwnd: HWND; clr: COLORREF): COLORREF;
  8347. begin
  8348.   Result := COLORREF(SendMessage(hwnd, TVM_SETTEXTCOLOR, 0, LPARAM(clr)));
  8349. end;
  8350.  
  8351. function TreeView_GetBkColor(hwnd: HWND): COLORREF;
  8352. begin
  8353.   Result := COLORREF(SendMessage(hwnd, TVM_GETBKCOLOR, 0, 0));
  8354. end;
  8355.  
  8356. function TreeView_GetTextColor(hwnd: HWND): COLORREF;
  8357. begin
  8358.   Result := COLORREF(SendMessage(hwnd, TVM_GETTEXTCOLOR, 0, 0));
  8359. end;
  8360.  
  8361. function TreeView_SetScrollTime(hwnd: HWND; uTime: UINT): UINT;
  8362. begin
  8363.   Result := SendMessage(hwnd, TVM_SETSCROLLTIME, uTime, 0);
  8364. end;
  8365.  
  8366. function TreeView_GetScrollTime(hwnd: HWND): UINT;
  8367. begin
  8368.   Result := SendMessage(hwnd, TVM_GETSCROLLTIME, 0, 0);
  8369. end;
  8370.  
  8371. function TreeView_SetInsertMarkColor(hwnd: HWND; clr: COLORREF): COLORREF;
  8372. begin
  8373.   Result := COLORREF(SendMessage(hwnd, TVM_SETINSERTMARKCOLOR, 0, LPARAM(clr)));
  8374. end;
  8375.  
  8376. function TreeView_GetInsertMarkColor(hwnd: HWND): COLORREF;
  8377. begin
  8378.   Result := COLORREF(SendMessage(hwnd, TVM_GETINSERTMARKCOLOR, 0, 0));
  8379. end;
  8380.  
  8381. { Tab control }
  8382.  
  8383. function TabCtrl_HitTest(hwndTC: HWND; pinfo: PTCHitTestInfo): Integer;
  8384. begin
  8385.   Result := SendMessage(hwndTC, TCM_HITTEST, 0, LPARAM(pinfo));
  8386. end;
  8387.  
  8388. function TabCtrl_SetItemExtra(hwndTC: HWND; cb: Integer): BOOL;
  8389. begin
  8390.   Result := BOOL(SendMessage(hwndTC, TCM_SETITEMEXTRA, cb, 0));
  8391. end;
  8392.  
  8393. function TabCtrl_AdjustRect(hwnd: HWND; bLarger: BOOL; prc: PRect): Integer;
  8394. begin
  8395.   Result := SendMessage(hwnd, TCM_ADJUSTRECT, WPARAM(bLarger), LPARAM(prc));
  8396. end;
  8397.  
  8398. function TabCtrl_SetItemSize(hwnd: HWND; x, y: Integer): DWORD;
  8399. begin
  8400.   Result := SendMessage(hwnd, TCM_SETITEMSIZE, 0, MAKELPARAM(x, y));
  8401. end;
  8402.  
  8403. procedure TabCtrl_RemoveImage(hwnd: HWND; i: Integer);
  8404. begin
  8405.   SendMessage(hwnd, TCM_REMOVEIMAGE, i, 0);
  8406. end;
  8407.  
  8408. procedure TabCtrl_SetPadding(hwnd: HWND; cx, cy: Integer);
  8409. begin
  8410.   SendMessage(hwnd, TCM_SETPADDING, 0, MAKELPARAM(cx, cy));
  8411. end;
  8412.  
  8413. function TabCtrl_GetRowCount(hwnd: HWND): Integer;
  8414. begin
  8415.   Result := SendMessage(hwnd, TCM_GETROWCOUNT, 0, 0);
  8416. end;
  8417.  
  8418. function TabCtrl_GetToolTips(wnd: HWND): HWND;
  8419. begin
  8420.   Result := HWND(SendMessage(wnd, TCM_GETTOOLTIPS, 0, 0));
  8421. end;
  8422.  
  8423. procedure TabCtrl_SetToolTips(hwnd: HWND; hwndTT: HWND);
  8424. begin
  8425.   SendMessage(hwnd, TCM_SETTOOLTIPS, WPARAM(hwndTT), 0);
  8426. end;
  8427.  
  8428. function TabCtrl_GetCurFocus(hwnd: HWND): Integer;
  8429. begin
  8430.   Result := SendMessage(hwnd, TCM_GETCURFOCUS, 0, 0);
  8431. end;
  8432.  
  8433. procedure TabCtrl_SetCurFocus(hwnd: HWND; i: Integer);
  8434. begin
  8435.   SendMessage(hwnd,TCM_SETCURFOCUS, i, 0);
  8436. end;
  8437.  
  8438. function TabCtrl_SetMinTabWidth(hwnd: HWND; x: Integer): Integer;
  8439. begin
  8440.   Result := SendMessage(hwnd, TCM_SETMINTABWIDTH, 0, x);
  8441. end;
  8442.  
  8443. procedure TabCtrl_DeselectAll(hwnd: HWND; fExcludeFocus: BOOL);
  8444. begin
  8445.   SendMessage(hwnd, TCM_DESELECTALL, WPARAM(fExcludeFocus), 0)
  8446. end;
  8447.  
  8448. function TabCtrl_HighlightItem(hwnd: HWND; i: Integer; fHighlight: WordBool): BOOL;
  8449. begin
  8450.   Result :=  BOOL(SendMessage(hwnd, TCM_HIGHLIGHTITEM, i, MAKELONG(Word(fHighlight), 0)));
  8451. end;
  8452.  
  8453. function TabCtrl_SetExtendedStyle(hwnd: HWND; dw: DWORD): DWORD;
  8454. begin
  8455.   Result := SendMessage(hwnd, TCM_SETEXTENDEDSTYLE, 0, dw);
  8456. end;
  8457.  
  8458. function TabCtrl_GetExtendedStyle(hwnd: HWND): DWORD;
  8459. begin
  8460.   Result := SendMessage(hwnd, TCM_GETEXTENDEDSTYLE, 0, 0);
  8461. end;
  8462.  
  8463. function TabCtrl_SetUnicodeFormat(hwnd: HWND; fUnicode: BOOL): BOOL;
  8464. begin
  8465.   Result := BOOL(SendMessage(hwnd, TCM_SETUNICODEFORMAT, WPARAM(fUnicode), 0));
  8466. end;
  8467.  
  8468. function TabCtrl_GetUnicodeFormat(hwnd: HWND): BOOL;
  8469. begin
  8470.   Result := BOOL(SendMessage(hwnd, TCM_GETUNICODEFORMAT, 0, 0));
  8471. end;
  8472.  
  8473. function TabCtrl_GetItemRect(hwnd: HWND; i: Integer; var prc: TRect): BOOL;
  8474. begin
  8475.   Result := BOOL(SendMessage(hwnd, TCM_GETITEMRECT, i, LPARAM(@prc)));
  8476. end;
  8477.  
  8478. { Animate control }
  8479.  
  8480. function Animate_Create(hwndP: HWND; id: HMENU; dwStyle: DWORD; hInstance: HINST): HWND;
  8481. begin
  8482.   Result := CreateWindow(ANIMATE_CLASS, nil, dwStyle, 0, 0, 0, 0, hwndP, id,
  8483.     hInstance, nil);
  8484. end;
  8485.  
  8486. function Animate_Open(hwnd: HWND; szName: PChar): BOOL;
  8487. begin
  8488.   Result := BOOL(SendMessage(hwnd, ACM_OPEN, 0, LPARAM(szName)));
  8489. end;
  8490.  
  8491. function Animate_OpenEx(hwnd: HWND; hInst: HINST; szName: PChar): BOOL;
  8492. begin
  8493.   Result := BOOL(SendMessage(hwnd, ACM_OPEN, WPARAM(hInst), LPARAM(szName)));
  8494. end;
  8495.  
  8496. function Animate_Play(hwnd: HWND; from, _to: Word; rep: UINT): BOOL;
  8497. begin
  8498.   Result := BOOL(SendMessage(hwnd, ACM_PLAY, rep, MAKELONG(from, _to)));
  8499. end;
  8500.  
  8501. function Animate_Stop(hwnd: HWND): BOOL;
  8502. begin
  8503.   Result := BOOL(SendMessage(hwnd, ACM_STOP, 0, 0));
  8504. end;
  8505.  
  8506. function Animate_Close(hwnd: HWND): BOOL;
  8507. begin
  8508.   Result := Animate_Open(hwnd, nil);
  8509. end;
  8510.  
  8511. function Animate_Seek(hwnd: HWND; frame: Word): BOOL;
  8512. begin
  8513.   Result := Animate_Play(hwnd, frame, frame, 1);
  8514. end;
  8515.  
  8516. { MonthCal control }
  8517.  
  8518. function MonthCal_GetCurSel(hmc: HWND; var pst: TSystemTime): BOOL;
  8519. begin
  8520.   Result := BOOL(SendMessage(hmc, MCM_GETCURSEL, 0, Longint(@pst)));
  8521. end;
  8522.  
  8523. function MonthCal_SetCurSel(hmc: HWND; const pst: TSystemTime): BOOL;
  8524. begin
  8525.   Result := BOOL(SendMessage(hmc, MCM_SETCURSEL, 0, Longint(@pst)));
  8526. end;
  8527.  
  8528. function MonthCal_GetMaxSelCount(hmc: HWND): DWORD;
  8529. begin
  8530.   Result := SendMessage(hmc, MCM_GETMAXSELCOUNT, 0, 0);
  8531. end;
  8532.  
  8533. function MonthCal_SetMaxSelCount(hmc: HWND; n: UINT): BOOL;
  8534. begin
  8535.   Result := BOOL(SendMessage(hmc, MCM_SETMAXSELCOUNT, n, 0));
  8536. end;
  8537.  
  8538. function MonthCal_GetSelRange(hmc: HWND; rgst: PSystemTime): BOOL;
  8539. begin
  8540.   Result := BOOL(SendMessage(hmc, MCM_GETSELRANGE, 0, Longint(rgst)));
  8541. end;
  8542.  
  8543. function MonthCal_SetSelRange(hmc: HWND; rgst: PSystemTime): BOOL;
  8544. begin
  8545.   Result := BOOL(SendMessage(hmc, MCM_SETSELRANGE, 0, Longint(rgst)));
  8546. end;
  8547.  
  8548. function MonthCal_GetMonthRange(hmc: HWND; gmr: DWORD; rgst: PSystemTime): DWORD;
  8549. begin
  8550.   Result := SendMessage(hmc, MCM_GETMONTHRANGE, gmr, Longint(rgst));
  8551. end;
  8552.  
  8553. function MonthCal_SetDayState(hmc: HWND; cbds: Integer; const rgds: TNMDayState): BOOL;
  8554. begin
  8555.   Result := BOOL(SendMessage(hmc, MCM_SETDAYSTATE, cbds, Longint(@rgds)));
  8556. end;
  8557.  
  8558. function MonthCal_GetMinReqRect(hmc: HWND; var prc: TRect): BOOL;
  8559. begin
  8560.   Result := BOOL(SendMessage(hmc, MCM_GETMINREQRECT, 0, Longint(@prc)));
  8561. end;
  8562.  
  8563. function MonthCal_SetToday(hmc: HWND; const pst: TSystemTime): BOOL;
  8564. begin
  8565.   Result := BOOL(SendMessage(hmc, MCM_SETTODAY, 0, Longint(@pst)));
  8566. end;
  8567.  
  8568. function MonthCal_GetToday(hmc: HWND; var pst: TSystemTime): BOOL;
  8569. begin
  8570.   Result := BOOL(SendMessage(hmc, MCM_GETTODAY, 0, Longint(@pst)));
  8571. end;
  8572.  
  8573. function MonthCal_HitTest(hmc: HWND; var info: TMCHitTestInfo): DWORD;
  8574. begin
  8575.   Result := SendMessage(hmc, MCM_HITTEST, 0, Longint(@info));
  8576. end;
  8577.  
  8578. function MonthCal_SetColor(hmc: HWND; iColor: Integer; clr: TColorRef): TColorRef;
  8579. begin
  8580.   Result := TColorRef(SendMessage(hmc, MCM_SETCOLOR, iColor, clr));
  8581. end;
  8582.  
  8583. function MonthCal_GetColor(hmc: HWND; iColor: Integer): TColorRef;
  8584. begin
  8585.   Result := TColorRef(SendMessage(hmc, MCM_SETCOLOR, iColor, 0));
  8586. end;
  8587.  
  8588. function MonthCal_SetFirstDayOfWeek(hmc: HWND; iDay: Integer): Integer;
  8589. begin
  8590.   Result := SendMessage(hmc, MCM_SETFIRSTDAYOFWEEK, 0, iDay);
  8591. end;
  8592.  
  8593. function MonthCal_GetFirstDayOfWeek(hmc: HWND): Integer;
  8594. begin
  8595.   Result := SendMessage(hmc, MCM_GETFIRSTDAYOFWEEK, 0, 0);
  8596. end;
  8597.  
  8598. function MonthCal_GetRange(hmc: HWND; rgst: PSystemTime): DWORD;
  8599. begin
  8600.   Result := SendMessage(hmc, MCM_GETRANGE, 0, Longint(rgst));
  8601. end;
  8602.  
  8603. function Monthcal_SetRange(hmc: HWND; gdtr: DWORD; rgst: PSystemTime): BOOL;
  8604. begin
  8605.   Result := BOOL(SendMessage(hmc, MCM_SETRANGE, gdtr, Longint(rgst)));
  8606. end;
  8607.  
  8608. function MonthCal_GetMonthDelta(hmc: HWND): Integer;
  8609. begin
  8610.   Result := SendMessage(hmc, MCM_GETMONTHDELTA, 0, 0);
  8611. end;
  8612.  
  8613. function MonthCal_SetMonthDelta(hmc: HWND; n: Integer): Integer;
  8614. begin
  8615.   Result := SendMessage(hmc, MCM_SETMONTHDELTA, n, 0);
  8616. end;
  8617.  
  8618. function MonthCal_GetMaxTodayWidth(hmc: HWND): DWORD;
  8619. begin
  8620.   Result := SendMessage(hmc, MCM_GETMAXTODAYWIDTH, 0, 0);
  8621. end;
  8622.  
  8623. function MonthCal_SetUnicodeFormat(hwnd: HWND; fUnicode: BOOL): BOOL;
  8624. begin
  8625.   Result := BOOL(SendMessage(hwnd, MCM_SETUNICODEFORMAT, WPARAM(fUnicode), 0));
  8626. end;
  8627.  
  8628. function MonthCal_GetUnicodeFormat(hwnd: HWND): BOOL;
  8629. begin
  8630.   Result := BOOL(SendMessage(hwnd, MCM_GETUNICODEFORMAT, 0, 0));
  8631. end;
  8632.  
  8633. { Date/Time Picker }
  8634.  
  8635. function DateTime_GetSystemTime(hdp: HWND; var pst: TSystemTime): DWORD;
  8636. begin
  8637.   Result := SendMessage(hdp, DTM_GETSYSTEMTIME, 0, Longint(@pst));
  8638. end;
  8639.  
  8640. function DateTime_SetSystemTime(hdp: HWND; gd: DWORD; const pst: TSystemTime): BOOL;
  8641. begin
  8642.   Result := BOOL(SendMessage(hdp, DTM_SETSYSTEMTIME, gd, Longint(@pst)));
  8643. end;
  8644.  
  8645. function DateTime_GetRange(hdp: HWND; rgst: PSystemTime): DWORD;
  8646. begin
  8647.   Result := SendMessage(hdp, DTM_GETRANGE, 0, Longint(rgst));
  8648. end;
  8649.  
  8650. function DateTime_SetRange(hdp: HWND; gdtr: DWORD; rgst: PSystemTime): BOOL;
  8651. begin
  8652.   Result := BOOL(SendMessage(hdp, DTM_SETRANGE, gdtr, Longint(rgst)));
  8653. end;
  8654.  
  8655. function DateTime_SetFormat(hdp: HWND; sz: PChar): BOOL;
  8656. begin
  8657.   Result := BOOL(SendMessage(hdp, DTM_SETFORMAT, 0, Longint(sz)));
  8658. end;
  8659. function DateTime_SetFormatA(hdp: HWND; sz: PAnsiChar): BOOL;
  8660. begin
  8661.   Result := BOOL(SendMessage(hdp, DTM_SETFORMATA, 0, Longint(sz)));
  8662. end;
  8663. function DateTime_SetFormatW(hdp: HWND; sz: PWideChar): BOOL;
  8664. begin
  8665.   Result := BOOL(SendMessage(hdp, DTM_SETFORMATW, 0, Longint(sz)));
  8666. end;
  8667.  
  8668. function DateTime_SetMonthCalColor(hdp: HWND; iColor: DWORD; clr: TColorRef): TColorRef;
  8669. begin
  8670.   Result := TColorRef(SendMessage(hdp, DTM_SETMCCOLOR, iColor, clr));
  8671. end;
  8672.  
  8673. function DateTime_GetMonthCalColor(hdp: HWND; iColor: DWORD): TColorRef;
  8674. begin
  8675.   Result := SendMessage(hdp, DTM_GETMCCOLOR, iColor, 0);
  8676. end;
  8677.  
  8678. function DateTime_GetMonthCal(hdp: HWND): HWND;
  8679. begin
  8680.   Result := SendMessage(hdp, DTM_GETMONTHCAL, 0, 0);
  8681. end;
  8682.  
  8683. procedure DateTime_SetMonthCalFont(hdp: HWND; hfont: HFONT; fRedraw: BOOL);
  8684. begin
  8685.   SendMessage(hdp, DTM_SETMCFONT, WPARAM(hfont), LPARAM(fRedraw));
  8686. end;
  8687.  
  8688. function DateTime_GetMonthCalFont(hdp: HWND): HFONT;
  8689. begin
  8690.   Result := HFONT(SendMessage(hdp, DTM_GETMCFONT, 0, 0));
  8691. end;
  8692.  
  8693. { IP Address edit control }
  8694.  
  8695. function MAKEIPRANGE(low, high: Byte): LPARAM;
  8696. begin
  8697.   Result := high;
  8698.   Result := (Result shl 8) + low;
  8699. end;
  8700.  
  8701. function MAKEIPADDRESS(b1, b2, b3, b4: DWORD): LPARAM;
  8702. begin
  8703.   Result := (b1 shl 24) + (b2 shl 16) + (b3 shl 8) + b4;
  8704. end;
  8705.  
  8706. function FIRST_IPADDRESS(x: DWORD): DWORD;
  8707. begin
  8708.   Result := (x shr 24) and $FF;
  8709. end;
  8710.  
  8711. function SECOND_IPADDRESS(x: DWORD): DWORD;
  8712. begin
  8713.   Result := (x shr 16) and $FF;
  8714. end;
  8715.  
  8716. function THIRD_IPADDRESS(x: DWORD): DWORD;
  8717. begin
  8718.   Result := (x shr 8) and $FF;
  8719. end;
  8720.  
  8721. function FOURTH_IPADDRESS(x: DWORD): DWORD;
  8722. begin
  8723.   Result := x and $FF;
  8724. end;
  8725.  
  8726. { Pager control }
  8727.  
  8728. procedure Pager_SetChild(hwnd: HWND; hwndChild: HWND);
  8729. begin
  8730.   SendMessage(hwnd, PGM_SETCHILD, 0, LPARAM(hwndChild));
  8731. end;
  8732.  
  8733. procedure Pager_RecalcSize(hwnd: HWND);
  8734. begin
  8735.   SendMessage(hwnd, PGM_RECALCSIZE, 0, 0);
  8736. end;
  8737.  
  8738. procedure Pager_ForwardMouse(hwnd: HWND; bForward: BOOL);
  8739. begin
  8740.   SendMessage(hwnd, PGM_FORWARDMOUSE, WPARAM(bForward), 0);
  8741. end;
  8742.  
  8743. function Pager_SetBkColor(hwnd: HWND; clr: COLORREF): COLORREF;
  8744. begin
  8745.   Result := COLORREF(SendMessage(hwnd, PGM_SETBKCOLOR, 0, LPARAM(clr)));
  8746. end;
  8747.  
  8748. function Pager_GetBkColor(hwnd: HWND): COLORREF;
  8749. begin
  8750.   Result := COLORREF(SendMessage(hwnd, PGM_GETBKCOLOR, 0, 0));
  8751. end;
  8752.  
  8753. function Pager_SetBorder(hwnd: HWND; iBorder: Integer): Integer;
  8754. begin
  8755.   Result := SendMessage(hwnd, PGM_SETBORDER, 0, iBorder);
  8756. end;
  8757.  
  8758. function Pager_GetBorder(hwnd: HWND): Integer;
  8759. begin
  8760.   Result := SendMessage(hwnd, PGM_GETBORDER, 0, 0);
  8761. end;
  8762.  
  8763. function Pager_SetPos(hwnd: HWND; iPos: Integer): Integer;
  8764. begin
  8765.   Result := SendMessage(hwnd, PGM_SETPOS, 0, iPos);
  8766. end;
  8767.  
  8768. function Pager_GetPos(hwnd: HWND): Integer;
  8769. begin
  8770.   Result := SendMessage(hwnd, PGM_GETPOS, 0, 0);
  8771. end;
  8772.  
  8773. function Pager_SetButtonSize(hwnd: HWND; iSize: Integer): Integer;
  8774. begin
  8775.   Result := SendMessage(hwnd, PGM_SETBUTTONSIZE, 0, iSize);
  8776. end;
  8777.  
  8778. function Pager_GetButtonSize(hwnd: HWND): Integer;
  8779. begin
  8780.   Result := SendMessage(hwnd, PGM_GETBUTTONSIZE, 0,0);
  8781. end;
  8782.  
  8783. function Pager_GetButtonState(hwnd: HWND; iButton: Integer): DWORD;
  8784. begin
  8785.   Result := SendMessage(hwnd, PGM_GETBUTTONSTATE, 0, iButton);
  8786. end;
  8787.  
  8788. procedure Pager_GetDropTarget(hwnd: HWND; ppdt: Pointer{!!});
  8789. begin
  8790.   SendMessage(hwnd, PGM_GETDROPTARGET, 0, LPARAM(ppdt));
  8791. end;
  8792.  
  8793. { TrackMouseEvent }
  8794.  
  8795. function _TrackMouseEvent;              external cctrl name '_TrackMouseEvent';
  8796.  
  8797. { Flat Scrollbar APIs }
  8798.  
  8799. function FlatSB_EnableScrollBar;        external cctrl name 'FlatSB_EnableScrollBar';
  8800. function FlatSB_GetScrollInfo;          external cctrl name 'FlatSB_GetScrollInfo';
  8801. function FlatSB_GetScrollPos;           external cctrl name 'FlatSB_GetScrollPos';
  8802. function FlatSB_GetScrollProp;          external cctrl name 'FlatSB_GetScrollProp';
  8803. function FlatSB_GetScrollRange;         external cctrl name 'FlatSB_GetScrollRange';
  8804. function FlatSB_SetScrollInfo;          external cctrl name 'FlatSB_SetScrollInfo';
  8805. function FlatSB_SetScrollPos;           external cctrl name 'FlatSB_SetScrollPos';
  8806. function FlatSB_SetScrollProp;          external cctrl name 'FlatSB_SetScrollProp';
  8807. function FlatSB_SetScrollRange;         external cctrl name 'FlatSB_SetScrollRange';
  8808. function FlatSB_ShowScrollBar;          external cctrl name 'FlatSB_ShowScrollBar';
  8809. function InitializeFlatSB;              external cctrl name 'InitializeFlatSB';
  8810. procedure UninitializeFlatSB;           external cctrl name 'UninitializeFlatSB';
  8811.  
  8812. end.
  8813.